0
点赞
收藏
分享

微信扫一扫

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

mjjackey 2023-07-03 阅读 107
c++

文章目录


  对博主的其他文章感兴趣的请移步到 【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;
}

四、参考博文

  • c语言动态开辟数组(一维与二维)
  • C++ 动态数组(new)
  • C++ 涨知识!new和delete知识总结(全面详细)
举报

相关推荐

0 条评论