用一级指针操作结构体

直接给结构体赋值

	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;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值