假设我有以下内容:
int a[100][100][100][100][100][100][100][100][100][100][100][100][100][100][100]
我创建了一个循环,为它分配一些随机值,并创建一个循环,也可以输出它。
我的C ++书指出,数组只将值赋给第一个数组,并且只为其余数组保留空间。这怎么样?会发生什么?计算机会立即崩溃,或最终崩溃,或者根本不崩溃?记忆是否会永久地从您的计算机上擦除?
注意:这仅用于教育目的。我只是想了解这一点 多维数组的基本原理,就是这样。
答案 0 :(得分:1)
在C和C ++中,数组是连续的内存块。这很重要,因为这意味着,只要知道数组的第一个元素的位置,就可以通过提供偏移量立即跳转到您想要的任何数组元素。这就是为什么你可以用array[4]
等命令索引数组的原因。
在这个问题的上下文中,重要的推论是,必须在声明数组时分配所有内存。对于几乎所有正常需求来说,这不是一个问题,但是当你得到多维数组时,所需的空间是维数的指数。因此,您要求的数组是需要sizeof(int)*100^15
个字节的数组。那是3637978807091713000 TB。尝试分配内存时,程序肯定会崩溃。