struct变量初始化

A.s*_*lar 1 c struct initialization

我尝试初始化struct变量如下:

struct Abc{
    char str[10];
};

int main(){
    struct Abc s1;
    s1.str="Hello";  //error
}
Run Code Online (Sandbox Code Playgroud)

我可以理解这种行为,因为它是一样的

char str[10];
str="Hello"; // incompatible types
Run Code Online (Sandbox Code Playgroud)

但请看下面的初始化

struct Abc s1={"Hello"};   //This is fine

struct Abc s2={.str="Hello"};  //This is also fine
Run Code Online (Sandbox Code Playgroud)

我记得在毕业时,我读了很多教科书,说这些初始化都是一回事(即使用{}表示法初始化结构变量并明确使用(.)运算符是相同的事情).但上面的讨论证明它们并不相同.

我的问题是这些初始化之间究竟有什么区别?

Yu *_*Hao 7

不同的是,这两行

struct Abc s1={"Hello"};   //This is fine
struct Abc s2={.str="Hello"};  //This is also fine
Run Code Online (Sandbox Code Playgroud)

正在初始化,而这

s1.str="Hello";
Run Code Online (Sandbox Code Playgroud)

作业.您可以将char数组初始化为字符串文字,但不能通过赋值.

  • @AsBhullar不,这是一种特殊形式的初始化,称为***指定**初始化*. (2认同)