c - char *a[]= {"hello", "world"}; 之间有什么区别?和 char a[][10]= {"hello", "world"};?

标签 c arrays pointers declaration implicit-conversion

当我尝试这段代码时

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

Memory layout diagram

红色 = 字符数组,绿色 = 指向字符的指针,青色 = 指向字符的指针。

char **(即指向char *的指针)只能指向char *变量,不能指向char大批 。

如您所见,名为pchar ** 指向一个char * 的存储。

但是q可以指向哪里呢?没有正确类型的变量。如果您想直接指向 bb 的行,那么您需要一个指向 char 数组的指针(而不是指向 char 指针的指针)。

关于c - char *a[]= {"hello", "world"}; 之间有什么区别?和 char a[][10]= {"hello", "world"};?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59349098/

相关文章:

php - 如何根据第一个数组列名在数据库表中插入数组值

php - 通过数组变量索引php数组

c++ - 反转指向数据成员的指针

pointers - C指针嵌套

c++ - 在 C 中使用 *&*&p 理解复杂的指针和寻址运算符

c - qsort比较功能不起作用

c - 打印 double ,最后不加零?

Javascript如何使用filter()内部的forEach()过滤数组

c - 获取C中无符号字符数组的长度

c++ - C++ 中的双变量显示相等,即使它们不相等