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

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

最佳答案

并没有真正的静态动态 数组。有静态存储分配动态存储分配指针。其中每一个都有自己的类型。 静态存储分配 将导致它自己的大小固定的类型。

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

关于c++ - 为什么动态和静态数组具有不同的类型名称? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37081215/

相关文章:

c++ - 在 C++ 中将一维数组作为二维数组访问

没有 "typename"或 "class"的 C++ 模板

c++ - "typename vector<T>::iterator"编译器无法识别

c++ - 你如何用cling加载一个库?

c++ - 在 C++ 中为指定字符着色

c++ - 继承的类数据成员

c++ - 数组之间的特征行叉积

Javascript 如果数组包含带有正则表达式的字符串

c++ - 为什么即使模板类型声明为 `typename` 仍然需要 `class` ?

c++ - if (static_cast<bool>(x)) 与 if (x)