4

designated initializers以下に示すように (「billy」の場合) 問題なく使用できますが、動的メモリで同じ初期化アプローチを使用すると、コンパイル時に問題が発生します。

指定イニシャライザの使用に関する制限は何ですか?

書き込み先 (つまりアドレス)以外、これら 2 つの初期化の違いは何ですか? 動的メモリで指定イニシャライザを使用できないのはなぜですか?

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 = {
               ^
4

2 に答える 2