gpt4 book ai didi

c - 复合文字是否删除任何以前的字段?

转载 作者:行者123 更新时间:2023-12-04 08:01:21 25 4
gpt4 key购买 nike

如果我有以下代码:

struct Person *person = malloc(sizeof (struct Person));
person->name = "Ed";
*person = (struct Person) {.age=40, .country="GB"};
第三个语句会抹掉这个名字吗?如果是这样,在使用复合文字时是否有任何方法可以忽略或继承任何现有字段,或者是否清除所有以前的字段并从提供的任何内容中重新创建它(取消任何未提供的内容)?

最佳答案

直接分配给 struct 时,所有字段都替换为赋值右侧值的对应字段。
无论右手边是复合字面量还是命名对象,效果都是一样的。所以这:

person = (struct Person) {.age=40, .country="GB"};
将相同的值分配给 person像这样:
struct Person person2 = {.age=40, .country="GB"};
person = person2;
name两种情况下的字段都将设置为 NULL,因为它没有在复合文字或命名对象中显式初始化。
但是请注意,复制后的任何填充字节都不需要相同:
Does struct assignment guarantee padding to also be equal

关于c - 复合文字是否删除任何以前的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66450325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com