关于变量初始化的一个有关问题

关于变量初始化的一个问题
    刚才写程序的时候,想着这些变量之后要用,就没有进行初始化。用gdb查看变量(断点设在对这些变量赋值之前)的时候突然发现这么一个现象:

    int a[MAX][MAX]={0};
    int N,num;
    int IndexRow;
    int IndexColumn;
    int TempRow;
    int TempColumn;


    第一个二维数组被初始化后,居然连后面的N,num,IndexRow等变量都被初始化了。
    而将第一个二维数组注释后,则后面的变量有的为0,有的为随机数。
    我觉得很奇怪,但不知道为什么,想请教大家。

------解决方案--------------------
其实纠结这些问题没有任何意思,局部变量不初始化的话,取决于当时栈中的数据,当二维数组存在时,刚好栈中后面的数据尚未用到恰好是0而已。
------解决方案--------------------
完全就是赶巧碰上了。
------解决方案--------------------
其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。

------解决方案--------------------
编译器喜欢这么做而已 
需要注意的是 不要利用这个不靠谱的特性就好了 
该初始化还是自己初始化 
不想初始化 就不写了
------解决方案--------------------
值为零不一定就是被初始化了,或许这段内存本来就为零。有数组时,数组就把其他变量项得更靠栈顶了。
你可以在调用这个函数之前再调用一个测试函数,在测试函数中定义一个比 int a[MAX][MAX]={0};更大的数组,然后把数组都赋上一个确定的非零值,然后再进行你的测试,看看什么结果,你就明白了。