C++用new创建二维数组的方法

方法一:使用常量

接上:如果将b(即列数)指定为一个常量,例如new int[a][3],其实质与new int[a]创建一个动态数组并无多大区别——只是元素类型由int变为了’int[3]'而已。

示例代码:
用这个方法来创建二维数组,比较直观、易用,但它最大的限制在于:你必须在编译时确定b的大小;

int main(void)
{
	int n = 2;
	int(*array_2D)[3] = new int[n][3];//array_2D是行指针!!!
	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j < 3; ++j)
		{
			array_2D[i][j] = i * j;
		}
	}

	// 回收方法和普通动态数组相同,使用'delete[]'即可
	delete[] array_2D;
	system("pause");
	return 0;
}

注意内存连续,类似array_2D[i*cols+j]这样的操作可以用。
下图可以看出其实二维数组的数组名就是一个行指针!
在这里插入图片描述
方法二:使用指针间接引用

首先创建若干个大小一致的动态数组,然后将这些数组的首地址(转化为指针)按顺序存储到一个动态数组中,就相当于模拟了一个二维动态数组。

示例代码:

#include<iostream>
using namespace std;
int main(void) {
	int rows = 3, cols = 3;
	//数组中的元素(即array_2D[i])类型为'int*',动态内存分配返回的是首元素的地址,故使用'int**'
	int **array_2D = new int*[rows];
	for (int i = 0; i < rows; i++)
		//数组中的元素(即array_2D[i][j])类型为'int',动态内存分配返回的是首元素的地址,故使用'int*'
		array_2D[i] = new int[cols];
	for (int i = 0; i < rows; i++)
		for (int j = 0; j < cols; j++)
			array_2D[i][j] = i*j;//注意内存非连续,类似array_2D[i*cols+j]这样的操作不可用,会造成数组越界
	
	//释放内存时,首先回收低一级的动态内存
	for (int i = 0; i < rows; i++)
		delete[] array_2D[i];

	//然后回收高一级的动态内存
	delete[] array_2D;
	system("pause");
	return 0;
}

注意内存非连续,类似array_2D[i*cols+j]这样的操作不可用,会造成数组越界(下图很清晰地可以通过地址看出)。
在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值