动态分配二维数组以及二维数组传参

动态分配二维数组以及二维数组传参


如下:本程序是通过调用zone_read,将数据存入ethinfo输出参数中的
      需调用buf_read两次,第一次获得一维大小,然后动态分配空间,再次调用buf_read得以将数据存入动态分配的堆中
      *********************************************************
     
int buf_read(char *buf_name,char **info)
{
        if(info==NULL) return 5;  //返回一维的大小
        if(info!=NULL)
        {
                strcpy(*info,"eth1");
                strcpy(*(info+1),"eth2");
                strcpy(*(info+2),"eth3");
                strcpy(*(info+3),"eth4");
                strcpy(*(info+4),"eth5");
        }
        return 5;
}
int main(int argc,char *argv[])
{
                          //已知二维的大小为10;
        int n=0,i;
        char *p,**q;
        n=buf_read("hello",NULL);  //获取一维的大小
  第一种方法分配内存:
   --------------------------------------------      
  q =(char **)malloc(n*sizeof(char *));
  for(i=0;i<n;i++)
        q[i]=(char *)malloc(10);
    ———————————————————————————————————————————-           
  第二种方法分配内存:
  ----------------------------------------------
  q =(char **)malloc(n*sizeof(char *));
  p =(char *)malloc(n*10);
  for(i=0;i<n;i++)
        q[i]=p+(i*10);
  ----------------------------------------------
 
  第三种方法分配内存:
  ----------------------------------------------
  q =(char **)malloc(n*10+n*sizeof(char *));
  p=(char *)q+n*sizeof(char *);
  for(i=0;i<n;i++)
       q[i]=p+(i*10);
  ----------------------------------------------
  
        buf_read("hello",q);
        for(i=0;i<n;i++)
        {
                printf("%s:/n",q[i]);
                printf("%c:/n",q[i][3]);
        }
        free(q);
        return 0;
}

个人总结:
   第一种方法的空间分散,且手动分配的次数较多,就存储结构,程序性能,已经健壮性都不如其他两种方法
   第二种方法的空间也不连续,虽然只有两片区域,相对第一种方法方便了不少
   第三种方法只分配了一次空间,存储空间连续,相对来说是最好的一种方法
   此三种方法都可通过q[i],q[i][j]来调用一维和二维的元素
   此程序经过测试raindy

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值