动态开辟二维数组
int a
a是int类型的变量,内存中被命名为a的空间内保存的是一个整形数据
int* b
b是int类指针类型的变量,内存中被命名为b的空间内保存的是一个整形指针(整形的地址)的数据
int** c
c是int类型的指针的指针类型的变量,内存中被命名为c的空间内保存的是一个整形指针的指针(整形指针的地址)的数据
一维数组
c++
1 | int a[4]; |
一维数组的动态开辟:
c++
1 | int* a = new int[10]; |
别忘什么是动态内存:
栈中的内存开辟需要在编译前就要确定具体大小,比如在定义一个普通数组的时候,这个数组的大小一定是已知的,是一个常量,就算是用一个整形变量a用来在定义数组的时候表示数组的大小,在编译之前a的值也是一定要确定下来的
动态内存是在堆中开辟的,动态开辟内存就是在编译之前可以不指定需要开辟的空间的大小,在编译之后再根据程序猿的指定开辟相应的大小。
二维数组
如果在栈中定义二维数组(比如局部变量),二维数组本质上就是一个一维数组,然后将一维数组按照指定的大小分成等分,比如一个m*n的二维数组,意思是m行n列,其实是将一个长度为m *n的等分为m份,每一份中有n个元素
c++
1 | int a[3][4]; |
栈中的二维数组每行必须等长
二维数组的动态开辟:
c++
1 | int** a = new int* [m]; |
动态开辟二维数组,实际上是先new一个数组元素为指针的一维数组,这个一维数组中的每个元素都是指向一个新开辟的一维数组地址的指针
所以在堆中开辟的二维数组并不要求每行都是等长的
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 浴巾的贼船!
评论