char Vs的指针数组int的指针数组

yugsharma1711

为什么第一个声明有效而另一个声明无效?

    char* string[2] = { "Hello", "Bellow" };

    int* b[2] = { {1,2,3}, {2,3,4} };
约翰·波德

除非它是sizeofor或unary运算&的操作数,或者是用于在声明中初始化字符数组的字符串文字,否则“ N-元素数组of 类型表达式T将转换为“ decay”或键入“ pointer to T”,表达式的值将为数组第一个元素的地址。

在声明中

char* string[2] = { "Hello", "Bellow" };

字符串文字不用于初始化字符数组,而是用于初始化指针数组,因此两个字符串都“衰减”至指向其第一个元素的指针,因此您得到

char *[2] = { char *, char * };

在另一个声明中

int* b[2] = { {1,2,3}, {2,3,4} };

{1,2,3}并且{2,3,4}不是数组表达式-它们是初始化器列表,并且它们不“衰减”到指针。正如tstanisl所示,您可以使用复合文字,例如

int *b[2] = { (int[]){1,2,3}, (int[]){2,3,4} };

并且每个复合文字表达式将衰减为指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章