大家不要认为二维数组在内存中就是按行、列这样二维存储的,实际上,不管二维、三维数组… 都是编译器的语法糖。
存储上和一维数组没有本质区别,举个例子:
<p>int array[3][3] = {</p><p> </p><p> {1, 2,3}, {4, 5,6},{7, 8, 9}};</p><p>array[1][1] = 5;</p>
或许你以为在内存中 array 数组会像一个二维矩阵:
<p>1 2 3</p><p>4 5 6</p><p>7 8 9</p>
可实际上它是这样的:
和一维数组没有什么区别,都是一维线性排列。
当我们像 array[1][1]这样去访问的时候,编译器会怎么去计算我们真正所访问元素的地址呢?
为了更加通用化,假设数组定义是这样的:
<p>int array[n][m]</p><p>
</p><p>访问: array[a][b]</p>
那么被访问元素地址的计算方式就是: array + (m * a + b)
这个就是二维数组在内存中的本质,其实和一维数组是一样的,只是语法糖包装成一个二维的样子。
|