前言

  在《指针的使用及解析》中我们说明了数组的内存结构,在这里我们详细论证一下这个结构的合理性。

描述和论证

  我们再来回顾一下数组的内存形式:

二维数组内存结构

  可以看到,一维数组的内存结构非常简单。而二维数组在排列时,会先将第一个一维数组全部排列到内存中,然后接着排列第二个一维数组,以此类推,直到所有数据都存放完毕。让我们用代码论证一下这个结构:

1
2
3
4
5
6
7
8
9
10
11
int main() {
int index[3][3] = {
{0, 1, 2},
{3, 4, 5},
{6, 7, 8}
};
for (int i = 0; i != 9; ++i) {
printf("%d", index[0][i]);
}
return 0;
}

  小伙伴们可以试一下这个代码的运行结果是什么,显而易见,结果是012345678。由此可见,上述的结构是合理的。

  现在我们设:有一个三维数组array3d,访问时格式为:array3d[z][y][x],所以可得下图:

三维数组

  验证这个结构的代码也很简单:

1
2
3
4
5
6
7
8
9
10
int main() {
int a[2][2][2] = {
{{0,1},{2,3}},
{{4,5},{6,7}},
};
for (int i = 0; i != 8; ++i) {
printf("%d ", a[0][0][i]);
}
return 0;
}

  这段代码的输出结果是:0 1 2 3 4 5 6 7


创作不易,扫描下方打赏二维码支持一下吧ヾ(≧▽≦*)o