【C++】VS2022 利用new开辟动态数组


  对博主的其他文章感兴趣的请移步到 【CSDN文章】博客文章索引

一、描述

  同样的语句在Dev上允许编译通过,而在VS上则会提示“[ ]”内必须有常量值。这是因为不同的编译器对C++的支持不同。当我们需要在VS创建动态数组时,就要借用new动态创建数组了。

int n = 10;
int array[n];

动态数组的定义:数组的维度可以为常量、也可以为一个函数的返回值

int size()
{
    return 3;
}
const int length = 3;
 
int *p1 = new int[size()]{1,2,3};
int *p2 = new int[length];
int *p3 = new int[3];

二、一维和二维动态数组

  仅以C++new和delete为例,malloc和free是同样的道理。
创建一维动态数组

int* arr1 = new int[n];					// 已经分配内存,未初始化
for (int i = 0; i < n; ++i) {
		arr1[i] = count++;
		cout << arr1[i] << ' ';
	}
cout << endl;

创建二维动态数组

int row = 5, col = 4;			// 行列
int** arr10 = new int* [row];	// 创建二级指针数组(指向堆上大小为row的一级指针数组)
for (int i = 0; i < row; ++i) {
	arr10[i] = new int[col];		// 指针数组的一级指针指向大小为col的数组
}
for (int i = 0; i < row; ++i) {	// 赋值
	for (int j = 0; j < col; ++j) {
		arr10[i][j] = count++;
		cout << arr10[i][j] << ' ';
	}
	cout << endl;
}

三、完整代码

# include <iostream>
using namespace std;

int main()
{
	// 一维数组
	cout << "一维数组:" << endl;
	int n = 10;
	//int arr[n];	// 报错
	int count = 1;
	int* arr1 = new int[n];					// 已经分配内存,未初始化
	int* arr2 = new int[n]();				// 初始化为0
	int* arr3 = new int[5] {1, 2, 3, 4, 5};	// 给定初始值
	for (int i = 0; i < n; ++i) {
		arr1[i] = count++;
		cout << arr1[i] << ' ';
	}
	cout << endl;

	// 二维数组
	cout << "二维数组:" << endl;
	int row = 5, col = 4;			// 行列
	int** arr10 = new int* [row];	// 创建二级指针数组(指向堆上大小为row的一级指针数组)
	for (int i = 0; i < row; ++i) {
		arr10[i] = new int[col];		// 每个一级指针数组指向大小为col的数组
	}
	for (int i = 0; i < row; ++i) {	// 赋值
		for (int j = 0; j < col; ++j) {
			arr10[i][j] = count++;
			cout << arr10[i][j] << ' ';
		}
		cout << endl;
	}
	//delete[]arr1, []arr2, arr3, arr10; // 报错
	// delete[]arr1, arr2, arr3, arr10; // 编译通过,但是只能释放arr1
	delete []arr1;
	delete []arr2;
	delete []arr3;
	delete []arr10;	// 手动释放开辟的空间
	system("pause");
	return 0;
}

四、参考博文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚安66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值