rav*_*dhi 3 c arrays string pointers initialization
char *s = "Hello"char s[6] = "Hello" 上述任何一种语法都可以正常工作.
但是关注呢?
int a[3] = {1,2,3} (这会很好)int *a = {1, 2, 3};呢?解释以及案例[2]和[4]之间的比较将会有所帮助.
这是因为"Hello"被替换为"字符串文字Hello的地址".所以char *s = "Hello"意味着"为指针分配s字符串文字Hello的地址".
同时{1, 2, 3}不构成地址而不替换.除了地址之外,您不能为指针分配任何其他内容,因此您无法编写int *a = {1, 2, 3}.
无效的原因是未定义初始值的数据类型.对于字符串文字,这是由语法隐式给出的.但{ 1,2,3}可以是数组,结构或许多其他变体.
您必须指定类型:
int *ia = (int []){1,2,3};
Run Code Online (Sandbox Code Playgroud)
这使用复合文字(C99).
请注意,这不仅适用于初始化,也适用于普通代码.