柔性数组 的理解

在结构体中,可以定义长度为零的数组,在堆区上开辟空间时,可以根据所需要的空间向内存申请。

以上两种写法都可以;

struct S* ptr = (struct S*)malloc(sizeof(struct S));  此时编译器计算出的大小只有4字节,不包括结构体成员中的数组arr; 我们根据实际需求再向系统申请空间;这里举例:需要 40个字节存储10个整型值,代码实现为:                                                                                                                         (struct S*)ptmp = (struct S*)realloc(sizeof(struct S)+sizeof(int)*10);                           if(ptmp!=NULL);  ptr=ptmp;  此时,结构体指针ptr指向新空间(空间大小为4+40=44节); 

注意使用场景为:在堆区开辟空间用作存储数据!

**************************************************************************************************************

以上功能我们可以以另一种方法来实现: 定义一个结构体,成员可以是 int num;int* arr;

 

此种方法完全可以实现上面的功能,唯一的区别就是 多一次使用malloc()函数;                       代码实现如下: 

  struct S* ptr = (struct S*)malloc(sizeof(struct S));

   int* ptmp = (int*)malloc(sizeof(int*10));

  if(ptmp!=NULL)       ptr->arr = ptmp;

 

说明:① 在堆区申请结构体存储空间

           ②在堆区申请结构体中数组的空间,空间大小根据需求申请

           ③、④是结构体中数组的空间不够用,重新根据需求申请后使用 

总结:个人想法是此两种方法都可解决实际问题,重点是理解过程。

         第一种方法 只需释放一次

        第二种方法  需要连续释放两次 ,容易出现内存泄漏;

        使用数组访问存储的数据快速。    减少内存碎片是大佬们的认知,对于目前的我,只能是记          住,还体会不到那一层次的免用,路漫漫其修远兮,只能站在大佬们的肩膀上学习!

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值