相关疑难解决方法(0)

将指定的初始化程序与堆一起使用

可以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;
}
Run Code Online (Sandbox Code Playgroud)
error: expected expression before '{' token
  *molly_ptr = …
Run Code Online (Sandbox Code Playgroud)

c heap designated-initializer

3
推荐指数
1
解决办法
334
查看次数

标签 统计

c ×1

designated-initializer ×1

heap ×1