最近碰到一个c++创建动态二维数组的问题。上网查了查资料,现在吧有关内容做一个小结。
关于二维数组,有几个容易混淆的概念。
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
int * *arr0 是一个二级指针,就是指针的指针。int *arr1[]是一个指针数组,就是说,它首先是一个数组 ,而数组中的元素都是 int 型的指针。int (*arr2)[] 是一个数组指针, 它首先是一个指针, 不过该指针指向的是一个数组,这点可以类比于函数指针。 int arr3[][]是一个二维数组, 实际上是数组的数组,它有外层数组,二外层数组里的每一个元素都是(内层的)数组。实际上,二维数组int arr3[][]与 数组指针 int (*arr2)[]可以对应起来,假如函数形参是int arr3[][] ,实参为 int(*arr2)[]的话是可以调用成功的,这就像有一个这样的函数签名:void print(int arr[] ,int size)
你这样
- 1
- 2
- 3
- 1
- 2
- 3
是没有问题的。
下面说说如何创建动态二维数组,在c++中使用一对运算符 new 和delete来处理动态数组的创建。我在这里按照使用new的次数分为两种方法。
1.使用一次new运算符:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
在这里定义了一个3x2 的二维数组 ,要注意如果用这种方式有个限制,即二维数组的列数必须指定,否则编译会报错。
2.使用两次new运算符:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
上面定义了一个4x5 的二维数组。可以看到,在分配内存时时使用了两次new,那么在销毁内存时也要使用两次delete。
可以看到两种方法操作二维数组元素的方式是一样的。