在尝试调试程序时,我偶然发现了一些有趣的东西,并且想知道这意味着什么。
我注意到,在动态或静态定义数组时,我会得到不同的类型名称。例如
#include <iostream>
#include <typeinfo>
int main()
{
int a[10];
int *b = new int[10];
int c[5][10];
int **d = new int*[5];
for ( size_t i = 0; i < 5; ++i )
d[i] = new int[10];
std::cout << typeid(a).name() << std::endl;
std::cout << typeid(b).name() << std::endl;
std::cout << typeid(c).name() << std::endl;
std::cout << typeid(d).name() << std::endl;
return 0;
}
我得到输出
A10_i
Pi
A5_A10_i
PPi
我在将 PPi
数据写入 hdf5 格式时遇到问题,但我很好奇为什么这些类型不同以及它们有何不同。
最佳答案
并没有真正的静态 或动态 数组。有静态存储分配、动态存储分配和指针。其中每一个都有自己的类型。 静态存储分配 将导致它自己的大小固定的类型。
作为一般规则,指针 会丢失它指向数组以及大小的信息。
声明为原始数组(例如 int arr[13]; int* p = arr;
)或使用 new []
动态分配(例如 int* p = new int[13];
).
关于c++ - 为什么动态和静态数组具有不同的类型名称? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37081215/