C ++中数组允许的最大维数是多少?

时间:2012-05-24 13:16:58

标签: c++ multidimensional-array

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

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

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

甚至用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];

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

3 个答案:

答案 0 :(得分:27)

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

  

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

     

[...]

     

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

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

答案 1 :(得分:4)

我的第一篇文章!

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

请注意,要确定系统的最大值,请使用尺寸最小的最小数据类型(char)(2)。维度为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!

}

答案 2 :(得分:-4)

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