20

您可以声明一个包含 10 个元素的非常简单的数组并以这种方式使用它:

int myArray[10];
myArray[4] = 3;
std::cout << myArray[4];

或者将具有 10x100 个元素的二维数组声明为int myArray[10][100];

甚至创建更复杂的 3-d 数组int myArray[30][50][70];

我什至可以写:

int complexArray[4][10][8][11][20][3];
complexArray[3][9][5][10][15][3] = 5;
std::cout <<  complexArray[3][9][5][10][15][3];

那么,声明数组时可以使用的最大维数是多少?

4

3 回答 3

28

该标准建议实现至少接受 256(ISO 14882,B.2),但它们可能支持更少或更多:

这些限制可能会限制包括以下描述的数量或其他数量。建议将每个数量后面的括号中的数字作为该数量的最小值。但是,这些数量仅作为指导,并不能确定合规性。

[…]

— 指针、数组和函数声明符(任意组合)修改声明中的算术、结构、联合或不完整类型 [256]。

在 C++03 和 C++11 中都是一样的。

于 2012-05-24T13:21:27.913 回答
5

我的第一篇文章!

值得一提的是,我的系统上的限制是静态分配时只有 30 个维度,而在堆栈上分配时是 19 个维度。系统是 AMD A10-7700K,64 位(8 GB RAM)。使用默认设置在 Visual C++ 2013 上编译。

请注意,为了确定系统上的最大值,请使用具有最小维度大小 (2) 的最小数据类型 (char)。当维度为 1 时没有限制,因为 1 的维度(在任何维度中)都是多余的,并且不会影响数组的整体大小。按理说,数据类型越大或维度的大小越大,您可以拥有的维度就越少。但是,我发现任何一个(并且只有一个)维度都可以是 3,但不能是 4。

#include<iostream>
int main()
{
   char a[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok
   char b[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail!
   static char c[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok
   static char d[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail!

}
于 2015-01-05T16:03:42.467 回答
-4

写入数组时唯一的限制是计算机的内存容量。

于 2014-05-07T16:01:36.993 回答