为什么结构不能直接分配?(Why structs cannot be assigned direct

2019-06-27 13:58发布

假设我有一个标签完全定义的结构MyStruct ,并假设x, y, ..., z是允许值的字段。 为什么是

struct MyStruct q = {x,y,..,z};

允许的,但

struct MyStruct q;
q = {x,y,...,z};

不被允许? 我觉得这很烦人。 在第二种情况下,在这里我先前已宣布q ,我需要通过一个一个值分配给每个字段,一个:

q.X = x; q.Y = y; ... q.Z = z;

其中, X, Y, ..., Z是领域MyStruct 。 是否有背后的原因呢?

Answer 1:

你要找的是文字的化合物。 这是加入到C99的语言。

你的第一种情况:

struct MyStruct q = {x,y,..,z};

是一个语法特定的初始化。 你的第二个情况下,在语言的pedantics没有初始化,但分配。 赋值的右边必须是正确的类型的结构。 此前C99有一个在语言没有语法来写一个结构的文本,这是你正在尝试做的。 {X,Y,...,Z}看上去像内的表达的块。 如果一个人的启发,试图把它作为一个字面值,虽然语言都没有,一个也不能肯定它的类型。 (在你的背景,你可以做一个很好的猜测。)

为了让这个和解决的问题类型,C99加入语法,所以你可以这样写:

q = (struct MyStruct){x,y,...,z};


Answer 2:

你可以这样做,但你需要你的前总供给结构的类型:

struct MyStruct q;
q = (struct MyStruct){x,y,...,z};


文章来源: Why structs cannot be assigned directly?
标签: c structure