在C语言中,if
char *ptr1 = "something";
是允许的,那为什么不允许呢?
int *ptr2 = {1,2,3};
不被允许?
发布于 2020-06-26 07:15:55
在第一种情况下,
char *ptr1 = "something";
"something"
归结为指向字符串文字的第一个元素的指针,产生一个char*
类型,因此该类型是兼容的,并且初始化中的赋值是有效的。
另一方面,
int *ptr2 = {1,2,3};
{1,2,3}
是一个用大括号括起来的初始值设定项列表,而不是int *
,因此它是无效操作且不被允许。
实际上,您可以使用compound literal进行初始化,如下所示
int *ptr2 = (int []){1,2,3};
其中ptr2
将指向数组的第一个元素,该数组由大括号括起的初始化器列表中给出的值组成。
https://stackoverflow.com/questions/62589723
复制