数组允许的最大维数是多少?为什么?

时间:2017-08-29 04:17:29

标签: c++ c

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

例如。

#include <iostream.h>
#include <conio.h>
{
       int a[3][3][3][4][3];
       a[2][2][2][2][2] = 9;
}

那么,我们可以在数组上声明多少维度。 它有什么限制? 它背后的原因是什么?

3 个答案:

答案 0 :(得分:11)

ISO / IEC 9899:2011 - C

在C中,C11标准要求:

  

5.2.4.1翻译限制

     

实现应能够翻译和执行至少一个程序   包含以下每个限制的至少一个实例: 18)

     
      
  • ...

  •   
  • 12个指针,数组和函数声明符(以任意组合)修改   声明中的算术,结构,联合或void类型。

  •   
  • ...

  •   
     

18)实施应尽可能避免强加固定的翻译限制。

这意味着要成为符合标准的编译器,它必须在int之类的简单类型上允许至少12个数组维度,但应尽量避免施加任何限制。 C90和C99标准也要求相同的限制。

ISO / IEC 14882:2011 - C ++

对于C ++ 11,等效信息是:

  

附件B(资料性附录)实施数量[implimits]

     

由于计算机是有限的,因此C ++实现不可避免地受到程序大小的限制   可以成功处理。每个实施都应记录已知的限制。这个文件   可以引用它们存在的固定限制,说明如何计算可变限制作为可用的函数   资源,或说固定限制不存在或未知。

     

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

     
      
  • ...

  •   
  • 指针,数组和函数声明符(以任意组合)修改类,算术或不完整   输入声明[256]。

  •   
  • ...

  •   

因此,在C ++中,建议你应该能够在数组声明中使用至少256个维度。

请注意,即使您已使编译器接受您的代码,最终也会对运行代码的计算机上的内存施加限制。这些标准规定了编译器必须允许的最小维数(在C ++标准中过度指定;考虑到256维数组时,思维难以理解)。目的是你不应该遇到问题 - 根据需要使用多个维度。 (你能想象使用64维数组的源代码,更不用说其他任何东西 - 源代码中的各个表达式看起来很可怕,更不用说写,读,修改了。)

答案 1 :(得分:1)

不难理解它仅受机器内存量的限制。您也可以采用100(n)维数组。 1

注意:您的代码正在访问未定义行为的绑定内存。

1.standard指定C的最小限制为12,c ++ 11的最小限制为256.(此信息是在与Jonathan leffler讨论后添加的。我之前的回答仅指出最大限制约束我的机器记忆。

答案 2 :(得分:0)

最大数量取决于堆栈大小。例如,如果堆栈大小= 1Mb - > int的大小[xx] [xx] [xx] [xx] [xx]必须&lt; 1MB