关于数组的一些小问题

#include
int main (void)
{
int numbers[0][0][0];

int sum = 0;
for(int i = 0;i < 2;i++)
{
    for(int j = 0; j < 3 ; j++)
    {
        for(int k = 0; k < 4 ; k++)
        sum += numbers[i][j][k];
    }
 } 

printf("the sum of the values in the number array is %d.\n",sum);
return 0; 

}
此程序结果为86究竟是怎么得来的呢?

你这么访问 numbers很危险,已经访问了越界的地址,数也是所访问地址当时的值

随机的,不同的编译器,不同的环境不同。
num在堆栈上,你越界访问访问到的是堆栈上的别的变量

在一些编译器上,你的代码根本就不让编译

gcc上编译直接提示不允许0大小的数组。

 In function 'int main()':
Line 4: error: ISO C++ forbids zero-size array 'numbers'
compilation terminated due to -Wfatal-errors.

申明的数组如果需要的空间为0(就是像你那样数组的每个维度都为0),那么起始的地址都是0028FF10,而循环中的相加的数是这个地址后每4字节的数值,我觉得是因为这段地址涉及到底层或其他配置吧,不是随机分配区域,所以机器上的这段地址的值相等,楼主可以自己看下那些地址的值,查阅下那些地址跟什么有关。

numbers里面的内容是随机的,结果自然也是随机的,换台机器跑就会是另外一个数值