试图调试一个程序我偶然发现了一些有趣的东西,并想知道这个的含义。
我注意到,在动态或静态定义数组时,我会得到不同的类型名。例如
#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格式时遇到问题,但我很好奇为什么这些类型不同以及它们的不同之处。
答案 0 :(得分:3)
实际上并不存在 static 或 dynamic 数组。有静态存储分配,动态存储分配和指针。每个都有自己的类型。 静态存储分配将导致它自己的类型固定大小。
作为一般规则,指针会丢失它指向数组的信息以及大小的大小。
将其声明为原始数组(例如int arr[13]; int* p = arr;
)或使用new []
动态分配(例如int* p = new int[13];
)。