c语言中二位动态数组

最近在用C解leetcode题目时,碰到一题需要返回一个动态二维数组的头指针,搞了半天才弄好。

         用c语言创建二维动态数组有两种方式。

1.     转化为指针数组申请,代码如下。

const int cols = 10;
int rows = 10;
int(*p)[cols];
p = (int(*)[cols])malloc(rows*cols *sizeof(int));
free(p);
p = NULL;

注意:

int(*p)[cols]与int* p[cols]不同。前者申请了一个指向数组的指针,即数组指针,等同于int a[cols], int*p =a,后者申请了一个元素为指针的数组,即指针数组,等同于typedef int* pINT; pINT p[cols]

此法中如要返回二级指针,这应该使用(int**)进行强制转换,并且在读取值时不能使用int t =p[i][j],而应当使用int t =*(p+i*cols+j)=p[i*cols +j]; 因为对于二维数组,a[10][10],a只是一个一级指针而已。

2.     直接申请一个二级指针,先为每行的头地址申请空间,再依据每行头地址逐行申请空间。

const int cols = 10;
int rows = 10;
int **p =NULL;
int i = 0;
p = (int**)malloc(rows *sizeof(int*));
for (i = 0; i < rows; i++)
{
    *(p + i) = (int*)malloc(cols*sizeof(int));
}
for(i = 0; i < rows; i++)
{
    free(*(p + i));
    *(p + i) = NULL;
}
free(p);
p = NULL;

此方法申请和释放内存都比较麻烦,但是只需要返回一个二维数组的头指针便可,并且获取值时可直接使用int t =p[i][j] =*(*(p+i)+j).

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值