问题描述
我是 C 编程的初学者,我无法弄清楚这两个表达式(带和不带大括号)之间有什么区别,如下所示。
char s1[] = {"The course of true love never did run smooth"};
char s1[] = "The course of true love never did run smooth";
我尝试通过使用进行测试
printf("%c",s1[0]),and
printf("%s",s1)
两者都给了我相同的答案。
解决方法
没有区别,大括号是可选的。
来自标准 6.7.9/14:
字符类型的数组可以由字符串字面量或 UTF-8 字符串字面量初始化,可选地括在大括号中。
,事实上,当一个字符数组由一个字符串字面量初始化时,例如
char s[] = "Hello";
那么这样的初始化等价于如下
char s[] = { 'H','e','l','o','\0' };
即字符串字面量的元素形成一个初始化列表。
所以你可以像这样初始化一个数组
char s[] = "Hello";
或者喜欢
char s[] = { "Hello" };
显示文字的元素形成一个初始化列表。
还要注意,你也可以初始化标量对象,例如
int x = 10;
或
int x = { 10 };