#include <iostream>
using namespace std;
const int MAX = 4;
int main ()
{
char *names[MAX] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};
char *ptr[MAX];
for (int i = 0; i < MAX; i++)
{
ptr[i] = &names[i];
}
for (int i = 0; i < MAX; i++)
{
cout << "Value of names[" << i << "] = ";
cout << *ptr[i] << endl;
}
return 0;
}
答案 0 :(得分:4)
您需要更改:
ptr[i] = &names[i]; // `&names[i];`is pointer to char*
到
ptr[i] = names[i];
另一件事是你应该将文字存储为const char*
而不是char*
,所以也要改变:
char *ptr[MAX];
char *names[MAX] = {
为:
const char *ptr[MAX];
const char *names[MAX] = {
您可以在编译器错误/警告中阅读以上内容,因此我建议您学习如何阅读它们,在这种情况下:
prog.cc:23:13: error: assigning to 'char *' from incompatible type 'char **'; remove &
ptr[i] = &names[i];
^ ~~~~~~~~~
编译器可以准确地为您提供分配所在位置的信息,还可以为您提供准确的信息:remove &
。这个输出来自clang,我认为它有一个最好的错误信息。
答案 1 :(得分:2)
Marcin所说的
ptr[i] = names[i];
这是因为names [i]实际上是一个指针。最后是为了打印
cout << ptr[i] << endl;
因为ptr [i]也是一个指针