c ++动态指针数组[重复]
Posted
技术标签:
【中文标题】c ++动态指针数组[重复]【英文标题】:c++ dynamic array of pointers [duplicate] 【发布时间】:2018-06-04 03:22:20 【问题描述】:我试图了解如何在 C++ 中创建一个动态指针数组。
我知道new
返回一个指向已分配内存块的指针,int*[10]
是一个指向int
的指针数组。但是为什么要将它分配给int**
?我很难理解这一点。
int **arr = new int*[10];
【问题讨论】:
如果int[]
衰减为int*
,那么int*[]
将衰减为int**
。
您通常使用T *arr = new T[N];
。如果T
是int
,那么它就变成int *arr = new int[N];
。如果T
是int *
,那么它就变成了int **arr = new int*[N];
。
使用 std::vector,而不是 new[]。
【参考方案1】:
根据 C++ 标准(4.2 数组到指针的转换)
1 类型为“N T 数组”或“未知数组”的左值或右值 T 的边界”可以转换为“指向 T 的指针”类型的纯右值。这 result 是指向数组第一个元素的指针。
例如,如果您有这样的数组
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 **
。
即运算符new返回指向动态分配数组的第一个元素的指针。
【讨论】:
虽然密切相关,但问题的代码中不会发生数组到指针的转换。 new-expression 的类型已经是指针而不是数组。 @user2079303 为了让理解更清楚,我描述了一般原理。以上是关于c ++动态指针数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章