动态分配变长的二维数组方法

54 篇文章 1 订阅
 

方法一:

#include <stdlib.h>
#include <stdio.h>

void** malloc2d(int w, int h, int size)
{
 int j;
 int rowSize = w * size;
 int indexSize = h * sizeof(void *);
 void **a = (void **) malloc(indexSize + h * rowSize);
 char *dataStart = (char *) a + indexSize;
 for(j = 0; j < h; j++)
  a[j] = dataStart + j * rowSize;
 return a;
}

void main()
{
int**m=(int**)malloc2d(5,5,sizeof(int));
int i,j;
for( i=0;i<5;i++)
for( j=0;j<5;j++)
   m[i][j]=1;

for( i=0;i<5;i++){
 for( j=0;j<5;j++)
  printf("%d",m[i][j]);
printf("\n");}
}

 

 

方法二:

#include <stdio.h>
#include <stdlib.h>
void main()
{
 int w,h;
 char **p2;
 int i,j;
 scanf("%d",&h);
 scanf("%d",&w);
p2=malloc(h*sizeof(int*));
for(i=0;i<h;i++)
  p2[i]=malloc(w*sizeof(int));

for(i=0;i<h;i++)
for(j=0;j<w;j++)
  p2[i][j]=i*j;


for(i=0;i<h;i++){
for(j=0;j<w;j++)
  printf("%4d",p2[i][j]);
printf("\n");}

 
}

可以发现:p2[i](i=0,...h)所开辟的空间是连续的;p2[i][j](i为某个指定的值时,j=0....w)所开辟的空间是连续的,但p2[i][j]与p2[i+1][j]的空间不连续;p2[0]与p2[0][0]的值也不相等的。为什么对于一个二维数组 int a[2][3],对于值而言,a==a[0]==a[0][0]的,那是因为a数组6个元素所开辟的空间是连续的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值