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