1.结构体含有指针,如果两个结构体赋值则只是拷贝指针
2.内含指针还需要重新申请内存
typedef struct teacher
{
char *name;
int age;
}teacher;
teacher t1;
t1.name = (char*)malloc(30);//给name动态分配空间
strcpy(t1.name, "liming");//把文字常量区的内容拷贝给t1.name
t1.age = 22;
teacher t2 = t1;//结构体的浅拷贝
t2.name = (char*)malloc(10*sizeof(char));//给name动态分配空间
printf("%s %d", t2.name, t2.age);
printf("%s %d", t1.name, t1.age);
strcpy(t2.name, "lindaxi");//把文字常量区的内容拷贝给t1.name
t1.age = 66;
printf("\n");
printf("%s %d", t2.name, t2.age);
printf("%s %d", t1.name, t1.age);
printf("\n");
if (t1.name != NULL) //释放分配给t1.name 的堆区空间
{
free(t1.name);
t1.name = NULL;
}
//C语言中不能存在二次释放,会导致程序崩溃,画出内存图,可以看到t1.name和t2.name指向同一内存
//if (t2.name != NULL)
//{
// free(t2.name);
// t2.name = NULL;
//}