// 结构体的成员是指针
// 如果结构体中的成员是指针时，可以直接赋值(常量区的地址)或者可以从堆区申请空间后赋值

#include <stdio.h>
#include <string.h>

struct Data1
{
    int n;
    char *name;
};

int main()
{
    struct Data1 d1 = {1, "lucy"};
    printf("%d %s\n", d1.n, d1.name);

    struct Data1 d2;
    d2.n = 100;
    d2.name = (char *)malloc(32); // 申请堆区空间
    // d2.name = "lucy";             // 导致内存泄漏，因为指针变量指向了常量区的地址，而不是堆区的地址
    strcpy(d2.name, "lucy"); // 修改堆区的内容
    printf("%d %s\n", d2.n, d2.name);

    free(d2.name); // 释放堆区空间，否则会导致内存泄漏
    return 0;
}