当我尝试这段代码时
char *a[] = {"hello", "world" };
char **p = a;
char a[][10]={"hello", "world"};
我的编译失败了,我被告知变量 a 存在类型冲突错误。顶部声明与底部声明有何不同?
最佳答案
这是内存布局的图片。这对应于代码:
char *a[2] = { "hello", "world" };
char **p = a;
char b[][10] = { "hello", "world" };
char **q = b; // Error
红色 = 字符数组,绿色 = 指向字符的指针,青色 = 指向字符的指针。
char **
(即指向char *
的指针)只能指向char *
变量,不能指向char大批 。
如您所见,名为p
的char **
指向一个char *
的存储。
但是q
可以指向哪里呢?没有正确类型的变量。如果您想直接指向 b
或 b
的行,那么您需要一个指向 char 数组的指针(而不是指向 char 指针的指针)。
关于c - char *a[]= {"hello", "world"}; 之间有什么区别?和 char a[][10]= {"hello", "world"};?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59349098/