打印
[开发资料]

二维数组

[复制链接]
21|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

大家不要认为二维数组在内存中就是按行、列这样二维存储的,实际上,不管二维、三维数组… 都是编译器的语法糖。

存储上和一维数组没有本质区别,举个例子:


<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>

可实际上它是这样的:


1  2  3  4  5  6  7  8  9

和一维数组没有什么区别,都是一维线性排列。

当我们像 array[1][1]这样去访问的时候,编译器会怎么去计算我们真正所访问元素的地址呢?

为了更加通用化,假设数组定义是这样的:

<p>int array[n][m]</p><p>
</p><p>访问: array[a][b]</p>


那么被访问元素地址的计算方式就是: array + (m * a + b)

这个就是二维数组在内存中的本质,其实和一维数组是一样的,只是语法糖包装成一个二维的样子。

使用特权

评论回复
沙发
LOVEEVER| | 2025-2-23 21:50 | 只看该作者
不管二维、三维数组… 都是编译器的语法糖

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

205

主题

2222

帖子

1

粉丝