C++动态分配二维数组

C/C++ 专栏收录该内容
41 篇文章 0 订阅

1. 动态分配

动态分配就是在运行的时候进行内存的分配,在C++中,可以在栈上分配数组,这种情况下,必须指定数组的长度,长度不能是变量,必须是常量或者常量表达式(其原因在于静态分配在编译时需要知道数组的长度,而变量在编译时不知道大小,所以必须指定为常量)

动态分配的长度可以是变量,也可以是输入的数值。

不同于Java,C++的数组可以分配在栈上(静态分配(int a[5])。

Java除了基本类型,所有的类型都是引用类型,都在堆中分配。Java的这一特性就要求java在数组声明时不能指定数组的长度(error:int a[5];),只有在数组动态分配内存时才能指定数组的长度。


2. C++动态分配二维数组

采用指针数组的形式:

	int size = 3;
	
	// 第一种方法,生成一个指针数组,然后为数组中每个指针赋值一个数组
	int **array_ptr;
	array_ptr = new int*[size]();
	for(int i = 0; i < size; ++i)
	{
		*(array_ptr + i) = new int[size]();
		for(int j = 0; j < size; ++j)
		{
			*(*(array_ptr + i) + j) = i + j;
			cout << *(*(array_ptr + i) + j) << "  ";
		}
		cout << endl;

	}
	// 这种方法在释放数组内存的时候比较麻烦
	// 需先释放指针数组的每个元素指向的数组,然后再释放该指针数组:
	for(int i = 0; i < size; ++i)
	{
		delete [size]array_ptr[i];
		array_ptr[i] = NULL;
	}
	delete [size]array_ptr;
	array_ptr = NULL;


采用vector:

cout << "input a number:" << endl;
	cin >> size;
	vector< vector<int> > vec(size, vector<int>(size) );
	for(int i = 0; i < size; ++i)
	{
		for(int j = 0; j < size; ++j)
		{
			vec[i][j] = i + j;
			cout << vec[i][j] << "  ";
		}
		cout << endl;
	}

primer中建议:能使用vector的时候,不要使用数组,但数组效率更高



  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值