结构体嵌套一级指针

结构体嵌套一级指针

  • 设计结构体 struct Person{char*name,int age}
  • 在堆区创建 结构体指针数组 malloc(sizeof(struct Person*)*3);
  • 给每个结构体也分配到堆区
  • 给每个结构体的姓名分配到堆区
  • 打印数组中所有人的信息

代码示例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Person
{
        char*name;
        int age;
};
struct Person**allocateSpace()
{
        struct Person**pArray = malloc(sizeof(struct Person*)*3);
        for (int i = 0; i < 3; i++)
        {
               //给每个结构体开辟内存
               pArray[i] = malloc(sizeof(struct Person));
               //给每个结构体的姓名   开辟内存
               pArray[i]->name = malloc(sizeof(char)*64);
               sprintf(pArray[i]->name,"name_%d",i+1);
               pArray[i]->age = i + 20;
        }
        return pArray;
}
void printArray(struct Person**pArray, int len)
{
        for (int i = 0; i < len; i++)
        {
               printf("姓名:%s  年龄:%d\n", pArray[i]->name, pArray[i]->age);;
        }
}
void freeSpace(struct Person**pArray, int len)
{
        for (int i = 0; i < len; i++)
        {
               //释放姓名
               if (pArray[i]->name != NULL)
               {
                       printf("%s被释放了\n",pArray[i]->name);
                       free(pArray[i]->name);
                       pArray[i]->name = NULL;
               }
               //释放结构体
               free(pArray[i]);
               pArray[i] = NULL;
        }
        //释放数组
        free(pArray);
        pArray = NULL;
}
void test01()
{
        struct Person**pArray = NULL; //malloc(sizeof(struct Person*)*3);
        pArray=allocateSpace();
        printArray(pArray,3);
        //释放内存
        freeSpace(pArray,3);
        pArray = NULL;
}
int main()
{
        test01();
        return EXIT_SUCCESS;
}

更多文章,敬请关注微信公众号:YQ编程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑马金牌编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值