[开发资料] 二维数组

[复制链接]
 楼主| 小小蚂蚁举千斤 发表于 2025-2-23 14:15 | 显示全部楼层 |阅读模式

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

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


  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 数组会像一个二维矩阵:

  1. <p>1  2  3</p><p>4  5  6</p><p>7  8  9</p>

可实际上它是这样的:


  1. 1  2  3  4  5  6  7  8  9

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

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

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

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


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

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

LOVEEVER 发表于 2025-2-23 21:50 | 显示全部楼层
不管二维、三维数组… 都是编译器的语法糖
中国龙芯CDX 发表于 2025-3-19 22:31 | 显示全部楼层
二维数组在内存中的本质,其实和一维数组是一样的
jf101 发表于 2025-3-20 17:38 | 显示全部楼层
数组其实就是地址
您需要登录后才可以回帖 登录 | 注册

本版积分规则

225

主题

2536

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

225

主题

2536

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部