在C语言中重新分配结构体

4

我是C语言的初学者,正在尝试使用结构体。在我创建了一个结构体之后,是否可以用花括号重新赋值?

typedef struct {
    int height;
    int age;
} Person;

int main (void)
{
    Person bill = {100,35};
    bill = {120,34}; // error: expected expression before ‘{’ token
    bill = Person {120,34}; // error: expected expression before ‘Person’

    return 0;
}
1个回答

9
不直接支持,但C99有复合字面量可以实现此功能。
bill = (Person){120,34};

你甚至可以通过使用指定初始化器来使事情更易读,例如:
bill = (Person){ .height = 120, .age = 34, };

非常感谢!在我的GCC(OSX GCC版本4.2.1)上运行良好。我不太了解C语言的变体以及使用新特性的影响,我可以问一下这是否被认为是“标准”的吗? - MachineElf
@MachineElf C语言有四种不同的版本:K&RC、C90、C99和C11。 K&RC是一个非标准版本,而其他三个版本的两位数字代表发布的年份。C99引入了复合字面量和指定初始化器。当前标准版本是C11,它也支持这些功能。因此,如果您的编译器无法处理这些代码,则应该被认为不符合C标准。 - Lundin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接