c++二维数组问题3.已知int a[3][2]={3,2,1}; 则表达式“a[0][0]/a[0][1]/a[0][

1个回答

  • 二维数组的实际上在内存里存储格式是一维的

    也就是a [3][2]

    占用了 3*2 个int 类型数据的 连续内存空间

    排放的模式是:

    a[0][0] ,a[0][1], a[1][0],a[1][1], a[2][0],a[2][1]

    为了表示方便,我打了空格分开了,其实是连续存储的,只是逻辑上认为是二维的而已.

    那么考虑初始化的问题,int a[3][2]={3,2,1}; 分别赋值给了a[0][0] ,a[0][1], a[1][0]

    现在考虑 a[0][2]到底是什么

    a[0][2]其实被编译器解释为 *( (*a+0 ) + 2) ,a是数组首地址,

    在C/C++编译器里,数组越界是不检查的,再考虑上面的存储格式

    也就是说 ,*( (*a+0 ) + 2) 这个值应该是指向了 *( (*a+0 ) + 1) =a[0][1] 隔壁的家伙

    现在你知道是谁了吧,a[1][0]

    所以a[0][2]就是a[1][0]=1;

    后面的简单算术问题我就不解释了.

    PS,不完全初始化话,没有赋值的元素都会被编译器弄成0.

    楼上不少人的解释都不涉及计算机本身,怎么也不会答到点子上的.