>char str[20]="HELLO";
是正确的,而
>char str[20];
>
str="HELLO";
不是。为什么?
答案 0 :(得分:2)
char str[20]="HELLO";
上面是标识符str
的声明和定义,并且具有 initializer {{1 }}。 C标准说明了此初始化:
初始化程序指定存储在对象中的初始值。
字符类型的数组可以由字符串文字或UTF-8字符串初始化 文字,可以选择用大括号括起来。字符串文字的连续字节(包括 如果有空间或数组大小未知,则终止为空字符),初始化 数组的元素。
"HELLO"
这里的第一行还是标识符char str[20];
str="HELLO";
的声明和定义,但没有初始化器。第二行是带有 assignment 表达式的语句。 分配的约束为:
赋值运算符的左值应为可修改的左值。
关于左值,数组……:
可修改的左值是一个 没有数组类型,...
因此,尝试分配给数组是违反约束的。