Pol*_*000 1 c arrays initialization variable-assignment
请注意,我正在执行此奇怪的任务不是因为我不清楚语法或对c还是陌生的。
我只是在尝试如果将一个int分配给一个数组会发生什么:
int a = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
为此,我收到以下警告:
warning: excess elements in scalar initializer
int a = {1, 2, 3};
^
warning: excess elements in scalar initializer
int a = {1, 2, 3};
^
Run Code Online (Sandbox Code Playgroud)
当我打印a的内容时,我得到1。
但是当我这样做时:
int a;
a = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
error: expected expression before ‘{’ token
a = {1, 2, 3};
^
Run Code Online (Sandbox Code Playgroud)
尽管我知道数组不是要分配给int变量的,但以上结果使我提出了疑问:
int x; x = ...和int x = ...和
首先,
int a = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
是定义和初始化语句,并且
int a;
a = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
是定义和赋值语句。
他们有不同的规则。该语法{1, 2, 3}称为大括号括起来的初始化程序列表,可在初始化语句中使用,而不是在赋值中使用-这是语法错误。因此,这回答了第二个片段中的错误。
对于第一个代码段,对于标量,引用C11第§6.7.9/ P11章
标量的初始化程序应为单个表达式,可以选择用大括号括起来。[...]
因此,该表达式{1, 2, 3}尝试提供一个以上的元素,这是多余的。那就是您的编译器警告您的内容。