C++动态指针数组

c++ dynamic array of pointers

我正在尝试了解如何在 C++ 中创建动态指针数组。 我知道 new returns 是指向已分配内存块的指针,而 int*[10] 是指向 int 的指针数组。但是为什么要将它分配给 int**?我很难理解这一点。

int **arr = new int*[10]; 

根据C++标准(4.2数组到指针的转换)

1 An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to a prvalue of type “pointer to T”. The result is a pointer to the first element of the array.

例如,如果您有这样的数组

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 returns指向动态分配数组第一个元素的指针。