在大括号和没有大括号的列表中声明的值有什么区别

问题描述

我是 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 };

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...