直接给结构体赋值
Teacher p;
strcpy(p.name,"lilei");
p.age = 20;
printf("name = %s,age = %d\n",p.name,p.age);
使用一级指针操作
运行时出现段错误,调试发现是在释放堆空间后打印值(已修复)
Teacer *p = NULL;
p = (Teacher *)malloc(sizeof(Teacher)); //申请与结构体相同步长的堆空间
p->name = (char *)malloc(30);//堆空间在申请数组
strcpy(p->name,"lilei");
p->age = 21;
printf("name = %s,age = %d\n",p->name,p->age); //在这儿打印
if(p->name != NULL)//先释放结构体里的指针
{
free(p->name);
p->name = NULL;
}
if(p != NULL)//再释放指向结构体的指针
{
free(p);
p = NULL;
}
//printf("name = %s,age = %d\n",p->name,p->age); 第一次写在这儿打印出现段错误 最后打印会出现断错误 指针指向为空
一级指针进阶(连续空间)
Teacher *a;
a = (Teacher *)malloc(3*sizeof(Teacher));//堆空间申请连续空间
int i;
for(i = 0;i < 3;i++)
{
a[i].name = (char*)malloc(30);//使用数组的方式进行操作 用.而不是->
strcpy(a[i].name,"lilei");
a[i].age = i + 2 * i;
}
for(i = 0;i < 3;i++)
{
printf("name = %s,age = %d\n",a[i].name,a[i].age);
}
for(i = 0;i < 3;i++)
{
if(a[i].name != NULL)
{
free(a[i].name);
a[i].name = NULL;
}
}
if(a != NULL)
{
free(a);
a = NULL;
}