为什么动态和静态数组有不同的类型名? (C ++)

时间:2016-05-06 20:51:34

标签: c++ arrays typename

试图调试一个程序我偶然发现了一些有趣的东西,并想知道这个的含义。

我注意到,在动态或静态定义数组时,我会得到不同的类型名。例如

#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格式时遇到问题,但我很好奇为什么这些类型不同以及它们的不同之处。

1 个答案:

答案 0 :(得分:3)

实际上并不存在 static dynamic 数组。有静态存储分配动态存储分配指针。每个都有自己的类型。 静态存储分配将导致它自己的类型固定大小。

作为一般规则,指针会丢失它指向数组的信息以及大小的大小。
将其声明为原始数组(例如int arr[13]; int* p = arr;)或使用new []动态分配(例如int* p = new int[13];)。