// 结构体的成员是指针 // 如果结构体中的成员是指针时,可以直接赋值(常量区的地址)或者可以从堆区申请空间后赋值 #include #include 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; }