这个问题在这里已有答案:
我试图了解如何在C ++中创建一个动态的指针数组。据我所知,new
返回指向已分配内存块的指针,int*[10]
是指向int
的指针数组。但是为什么要把它分配给int**
?我很难理解这一点。
int **arr = new int*[10];
根据C ++标准(4.2数组到指针转换)
1类型为“N T数组”或“T未知数组的数组”的左值或右值可以转换为“指向T的指针”类型的prvalue。结果是指向数组的第一个元素的指针。
例如,如果您有这样的数组
int a[] = { 1, 2, 3, 4, 5 };
然后在这个宣言中
int *p = a;
用作初始值设定项的数组指示符被隐式转换为指向其第一个元素的指针。
所以一般来说,如果你有数组
T a[N];
然后在极少数例外的表达式中,它被转换为指向T *
类型的第一个元素的指针。
在这个宣言中
int **arr = new int*[10];
初始化程序是一个数组元素,其类型为int *
。您可以引入typedef或别名声明
typedef int * T;
要么
using T = int *;
所以你可以写
T * arr = new T[10];
这是指针arr
指向动态分配的数组的第一个元素。由于数组的元素具有int *
类型,因此指向数组元素的指针类型为int **
。
这是operator new返回指向动态分配数组的第一个元素的指针。