c 动态数组_C++|动态一维数组和动态二维数组

本文详细介绍了C++中动态数组的概念,包括一维和二维动态数组的创建与内存分配。通过示例展示了如何使用new运算符在堆上动态创建数组,并演示了动态二维数组的申请过程,强调了内存释放的重要性。同时,文章还讨论了数组名作为指针常量的特性及其在内存管理中的应用。
摘要由CSDN通过智能技术生成

我们知道,CC++可以申请一个预定义大小尺寸的数组:

int a[11];//一维数组,a被C++编译器解释为指针常量

int b[3][4];//二维数组,其本质是线性的一维数组

二维数组b在内存中是线性顺序,各元素相邻存储,其地址自然也是线性关系。如果第一维下标用i表示,第二维用j表示,则其元素的偏移量分别是:i*4+j.

二维数组b可以理解为是数组的数组,其有三个元素:b[0]、b[1]、b[2],都是一维数组。

b[0]有四个元素:b[0][1]、b[0][2]、b[0][3]、b[0][4],

b[1]、b[2]有同样按规律排列的四个元素。

一维数组名是一个常量指针,可以赋值给一个一级指针,二维数组的第一维也可以用指针表示:

int* p=b[0];

二维数组名虽然可以理解为一个二级指针常量,但却不能赋值给一个二级指针:

int** c = b //error

我们知道,使用C语言的malloc()和C++的new可以使用堆内存,单个数据类型尺寸的堆内存称为动态变量,多个数据类型尺寸的堆内存称为动态数组。

1 动态一维数组

#include using namespace std;void main(){int array_size;cout << "How many numbers will be sorted? ";cin >> array_size;int* a = new int[array_size];for (int index = 0; index < array_size; index++)a[index]=index;for (index = 0; index < array_size; index++)cout << a[index] << " ";cout << endl;delete [] a; system("pause");}/*How many numbers will be sorted? 110 1 2 3 4 5 6 7 8 9 10*/

2 动态二维数组

相对于动态一维数组,动态二维数组的申请要稍微复杂一些。

因为二维数组是数组的数组,C++编译器要求在申请二维动态数组时,先要申请一个一维的指针数组,再依次为各指针申请直接的动态内存:

int**m = new IntArrayPtr[4];for (int i = 0; i<4; i++) m[i] = new int[4];
14e61253ef71d3f1537a1a7564c3426e.png
#include using namespace std;int main( ){ int d1, d2; cout << "Enter the row and column dimensions of the array:"; cin >> d1 >> d2; int** m = new int*[d1]; int i, j; for (i = 0; i < d1; i++) m[i] = new int[d2]; //m is now a d1 by d2 array. for (i = 0; i < d1; i++) for (j = 0; j < d2; j++) m[i][j]=(i+1)*10+j; cout << "Echoing the two-dimensional array:"; for (i = 0; i < d1; i++) { for (j = 0; j < d2; j++) cout << m[i][j] << " "; cout << endl; } for (i = 0; i < d1; i++) delete[] m[i]; delete[] m;system("pause"); return 0;}/*Enter the row and column dimensions of the array:4 5Echoing the two-dimensional array:10 11 12 13 1420 21 22 23 2430 31 32 33 3440 41 42 43 44*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值