无意中发现这行代码 char s[] = {"Hello World"};
能够正确编译,而且似乎与 char s[] = "Hello World";
的处理方式相同。但是第一个声明 ({"Hello World"}
) 不是包含一个 char 数组元素的数组吗?因此 s 的声明不应该写成 char *s[]
吗?实际上,如果我把它改成 char *s[] = {"Hello World"};
编译器也能够像预期的那样接受。
在寻找答案时,我唯一找到提到这个问题的地方是 这里,但没有引用标准。
所以我的问题是,为什么这行代码 char s[] = {"Hello World"};
能够编译通过,虽然左边的类型是 char 数组
,而右边的类型是 char 数组的数组
?
以下是一个可工作的程序:
#include<stdio.h>
int main() {
char s[] = {"Hello World"};
printf("%s", s); // Same output if line above is char s[] = "Hello World";
return 0;
}
感谢任何澄清。
附言:我的编译器是gcc-4.3.4。