字符数组和整数数组之间的区别

rav*_*dhi 3 c arrays string pointers initialization

  1. char *s = "Hello"
  2. char s[6] = "Hello"

上述任何一种语法都可以正常工作.

但是关注呢?

  1. int a[3] = {1,2,3} (这会很好)
  2. 但为什么不这样int *a = {1, 2, 3};呢?

解释以及案例[2]和[4]之间的比较将会有所帮助.

Ere*_*ith 5

这是因为"Hello"被替换为"字符串文字Hello的地址".所以char *s = "Hello"意味着"为指针分配s字符串文字Hello的地址".

同时{1, 2, 3}不构成地址而不替换.除了地址之外,您不能为指针分配任何其他内容,因此您无法编写int *a = {1, 2, 3}.


too*_*ite 5

无效的原因是未定义初始值的数据类型.对于字符串文字,这是由语法隐式给出的.但{ 1,2,3}可以是数组,结构或许多其他变体.

您必须指定类型:

int *ia = (int []){1,2,3};
Run Code Online (Sandbox Code Playgroud)

这使用复合文字(C99).

请注意,这不仅适用于初始化,也适用于普通代码.