我正在尝试用C语言初始化数组和字符串的方法,并发现:
char *str = "ABCDE";
Run Code Online (Sandbox Code Playgroud)
完美地初始化字符串,没有错误或警告,但是:
int *array = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
给我警告并最终转储核心.它现在真的让我烦恼,我想知道为什么这种声明适用于角色,但不适用于整数......
编辑:我正在使用gcc编译器.
通过这样做,它将适用于整数:
int array[] = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
或这个:
int *array = (int[]){1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
"string"告诉编译器它需要的所有信息(大小,类型)来实例化字符串(也就是带有NULL终结符的字节数组).{}除非你将它声明为复合文字,否则裸体不会.添加ints[]告诉编译器启动的数据是一个int数组.
正如内森在评论中指出的那样,这两种说法存在细微差别.
第一个,在堆栈上定义一个5个int的数组.此数组可以修改并一直运行到函数结束.
第二个,1)定义堆栈上五个int的匿名数组2)定义指向堆栈上匿名数组的第一个元素的指针'array'.由于内存在堆栈上,因此不应返回指针.此外,数组本身并不像字符串文字那样.
编辑:用评论员指出的复合文字取代了演员阵容.