gpt4 book ai didi

c - 在堆中使用指定的初始化程序

转载 作者:行者123 更新时间:2023-12-04 22:44:02 24 4
gpt4 key购买 nike

可以使用如下所示的 designated initializers(对于“billy”)没有问题,但是当在动态内存上使用相同的初始化方法时,事情会在编译时中断。

使用指定初始值设定项有哪些限制?

除了我们要写入的位置(即地址)之外,是什么使这两个初始化不同?为什么我们不能使用具有动态内存的指定初始值设定项?

struct student{
char *name;
int age;
};


void print_student(struct student* st){
printf("Student: %s is %d years old\n", st->name, st->age);
}


int main(void) {
srand(time(NULL));
struct student *molly_ptr = malloc(sizeof(struct student));

struct student billy = {
.name = "billy",
.age = rand()%30
};

*molly_ptr = {
.name = "molly",
.age = 25
};

//molly_ptr->name = "molly";
//molly_ptr->age = 25;

print_student(&billy);
print_student(molly_ptr);


return 0;
}
error: expected expression before '{' token
*molly_ptr = {
^

最佳答案

使用复合字面量:

*molly_ptr = ( struct student ){ .name = "molly", .age = 25 };

这几乎等同于:
struct student temp = { .name = "molly", .age = 25 };
*molly_ptr = temp;

关于c - 在堆中使用指定的初始化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35436554/

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