动态申请多维数组空间

      最近做算法题时,老是碰见二维指针的情况,以前老是用静态申请,感觉不灵活,于是网上查了查动态申请多维数组空间的方法,简单总结如下,希望能对跟多的人有帮助。若有人有更多的想法,可以评论添加。

      

        数组动态空间的申请原则:


         申请的时候从外层往里层,逐层申请;


         释放的时候从里层往外层,逐层释放。

  

       

动态申请空间函数为:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
都在stdlib.h函数库内

realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度

 例如:

char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);

malloc与calloc的区别为1块与n块的区别:
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址。
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为“size”字节的连续区域, 每一位都初始化为零,返回首地址。
realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小增大到size。

 

其实malloc也可实现calloc分配n块存储空间空间的功能:

 

int *p = (int *)calloc(10,sizeof(int));

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

 

以上都是申请了10个长度为sizeof(int)字节的存储空间

 

 动态内存分配方式详见:http://general-lee.blog.sohu.com/159051330.html

 

以下是两个简单的示例:

一组使用malloc方法,简单需要存放30个int 数据的内存3*10:

    

  不用每次用for循环去分配内存。可以一次性申请所需要的内存:

 

    int **power;

  int *subpower;

  int i,j;

  power = (int **)malloc(sizeof(int) *3);

  subpower = (int *)malloc(sizeof(int) * 10 * 3); 

  for(i =0; i< 3;i++)

  {

      power[i] = &subpower[i * 10];

  }

  

//...

  free(subpower);

  free(power);

 

     

 

 

    

    

  方法2:

    int **power;

  int i,j;

  power = (int **)malloc(sizeof(int) *3);

  for(i =0; i< 3;i++)
  {
      power[i] = (int *)malloc(sizeof(int) * 10);
  
  }
//....
  for(i=0;i<3;i++)
  {
      free(power[i]);
  }
  free(power);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值