声明数组时可以使用的最大维数是多少?
例如。
#include <iostream.h>
#include <conio.h>
{
int a[3][3][3][4][3];
a[2][2][2][2][2] = 9;
}
那么,我们可以在数组上声明多少维度。 它有什么限制? 它背后的原因是什么?
答案 0 :(得分:11)
在C中,C11标准要求:
5.2.4.1翻译限制
实现应能够翻译和执行至少一个程序 包含以下每个限制的至少一个实例: 18)
...
12个指针,数组和函数声明符(以任意组合)修改 声明中的算术,结构,联合或
void
类型。...
18)实施应尽可能避免强加固定的翻译限制。
这意味着要成为符合标准的编译器,它必须在int
之类的简单类型上允许至少12个数组维度,但应尽量避免施加任何限制。 C90和C99标准也要求相同的限制。
对于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