动态申请二维数组。

本文详细介绍了两种动态申请二维数组的方法:第一种是通过先申请一维数组,再调整指针来实现;第二种是逐行申请内存。这两种方法分别有不同的内存连续性和使用注意事项,对于避免内存越界和理解动态内存分配有很好的指导意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态申请二维数组可以先申请一个一维数组,然后再将其按地址分割成数组:

如想申请一个row行col列的int 数组:

先申请一个row*col的in一维t数组 : int * pInt = new int[row*col];

再数申请一个指针数组,每个指针指向一行: int ** ppInt =new int*[col];

再调整该指针的位置:

 for (int h=0;h<row;h++)
 {
     ppInt[h]=pInt+h*col;
 }

具体如下:红色为使用malloc函数。

int ** D2Array(int row,int col)
{
 int *pInt = new int[row*col]; 
 //int *pInt = (int *)malloc(sizeof(int)*row*col);
 int **ppInt =new int*[col];
 //int **ppInt=(int **)malloc(sizeof(int*)*col);
 for (int h=0;h<row;h++)
 {
  ppInt[h]=pInt+h*col;
 }
 return ppInt;
}

使用该方法创建的数组所有的元素在内存里是连续的

二、

首先申请一个大小为row的指针数组:int **ppInt=new int*[row];

再为每一个row分配大小为col的内存:

 for (int h=0;h<col;h++)
 {
     ppInt[h] = new int[col];
 } 

 具体如下: 

int ** D2Array2(int row,int col)
{
 //int **ppInt = (int **)malloc(sizeof(int *)*col);
 int ** ppInt = new int*[col];
 for (int h=0;h<col;h++)
 {
  //ppInt[h]=(int *)malloc(sizeof(int)*row);
  ppInt[h] = new int[row];
 }
 return ppInt;
}

这样的申请的数组各元素在每一行内是连续的?

动态申请字符串数组,字符串数组可以将其当做一个二维的字符数组:

char ** D2CArray(int len,int size)
{
 char ** pCArray = new char*[size];
 for (int i=0;i<size;i++)
 {
  pCArray[i] = new char[len];
 }
 return pCArray;
}

char ** D2CArray2(int len,int size)
{
 char * pCArray = new char[size*len];
 char ** ppCArray= new char*[size];
 
 for (int i=0;i<size;i++)
 {
  ppCArray[i]=pCArray+i*size;
 }

 return ppCArray;

}

这样申请的数组需要注意的指针的越界,即一个字符数组的写入长度超出其设置的长度,会覆盖下一个字符数组,不知道有没有其他更好的方法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值