为何C语言允许通过`var = (struct NAME){…}`为结构体变量赋值?
结构体变量整体赋值的正确姿势
之前误以为结构体变量定义后不能整体赋值,像下面这种写法确实是错误的:
struct Student student1; student1 = {"Andy", 18};原因是花括号初始化列表只能用于变量初始化阶段,不能直接放在赋值运算符右边。
过去只能靠逐个成员赋值来完成:
struct Student student1; student1.name = "Andy"; student1.age = 18;但其实可以通过复合字面量实现整体赋值:
struct Student student1; student1 = (struct Student){"Andy", 18}; // 合法这里
(struct Student){"Andy", 18}是C99标准引入的复合字面量,它会生成一个临时的struct Student匿名实例,然后利用结构体支持直接赋值的特性(赋值时会自动逐成员拷贝),把这个临时实例的值整体赋给student1。
内容的提问来源于stack exchange,提问作者leotsing
相关产品推荐
相关产品推荐

