本帖最后由 jackz007 于 2019-11-2 00:31 编辑
在内存中,任何多维数组实际都是以一维数组的形式呈现的,例如,二维数组 a ,与一维数组 aa 是完全一样的: int a[4][5] = {{ 1 , 2 , 3 , 4 , 5},
{ 6 , 7 , 8 , 9 , 10},
{11 , 12 , 13 , 14 , 15},
{16 , 17 , 18 , 19 , 20}} ;
int aa[] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , \
11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20} ;
通过这种转换可以看出,把多维数组视为一维数组,每个元素的先后顺序保持不变。多维数组不过就是对一维数组分了一下组而已。
懂得了这种转换关系,事情就变得好办了。二维数组 a 的每行有 5 个元素,所以,二维下标与一维下标的换算关系为: 根据代码: if(i + j == 3) printf("\n") ;
在 i + j = 3 的时候,会输出一个回车符,就二维数组 a 而言,与一维数组 aa 之间存在以下对应关系: a[0][3] -> aa[ 3]
a[1][2] -> aa[ 7]
a[2][1] -> aa[11]
a[3][0] -> aa[15]
所以,程序会在输出完 a[0][3]、a[1][2]、a[2][1]、a[3][0] 后,各输出一个回车符,也就是说,对全部 5 × 4 = 20 个元素一共输出 5 行,每输出 4 个元素就输出一个回车。 |