c ++动态指针数组

c++ dynamic array of pointers

本问题已经有最佳答案,请猛点这里访问。

我试图理解如何在C++中创建一个动态数组指针。我知道new返回一个指向已分配内存块的指针,int*[10]是指向int的指针数组。但你为什么要把它分配给一个int**?我正在努力理解这一点。

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


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

0

例如,如果有这样的数组

1
int a[] = { 1, 2, 3, 4, 5 };

那么在这个声明中

1
int *p = a;

用作初始值设定项的数组指示符被隐式转换为指向其第一个元素的指针。

所以一般来说,如果你有数组

2

然后在表达式中,除了极少数例外,它被转换为指向类型T *的第一个元素的指针。

在本声明中

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

初始值设定项是类型为int *的数组元素。可以引入typedef或别名声明

1
typedef int * T;

1
using T = int *;

所以你可以写

1
T * arr = new T[10];

即指针arr指向动态分配数组的第一个元素。由于数组元素的类型为int *,因此指向数组元素的指针的类型为int **

也就是说,new返回指向动态分配数组的第一个元素的指针。