为什么第一个声明有效而另一个声明无效?
char* string[2] = { "Hello", "Bellow" };
int* b[2] = { {1,2,3}, {2,3,4} };
除非它是sizeof
or或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] 删除。
我来说两句