当前位置: 首页 > news >正文

C语言:二维数组在内存中是怎么存储的

目录

1. 二维数组的定义:

2. 行主序存储:

具体内存排列:

3. 如何通过指针访问数据:

4. 总结:


在 C 语言中,二维数组是按 行主序(row-major order) 存储的。也就是说,数组的每一行按顺序存储在内存中,所有行按顺序依次存放在内存的连续区域。

1. 二维数组的定义

假设有一个二维数组 axisData,它的定义如下:

float axisData[3][4];

这个数组有 3 行 4 列,总共有 12 个元素。二维数组 axisData 在内存中的存储方式如下:

2. 行主序存储

数组中的数据在内存中的存储顺序是按行存储的。也就是说,首先存储的是第一行的所有元素,然后是第二行,接着是第三行,依此类推。

对于数组 axisData[3][4],它在内存中的布局如下:

axisData[0][0], axisData[0][1], axisData[0][2], axisData[0][3],
axisData[1][0], axisData[1][1], axisData[1][2], axisData[1][3],
axisData[2][0], axisData[2][1], axisData[2][2], axisData[2][3]

具体内存排列:

假设 axisData 在内存中的起始地址为 0x1000,那么它的内存布局将是:

内存地址数据
0x1000axisData[0][0]
0x1004axisData[0][1]
0x1008axisData[0][2]
0x100CaxisData[0][3]
0x1010axisData[1][0]
0x1014axisData[1][1]
0x1018axisData[1][2]
0x101CaxisData[1][3]
0x1020axisData[2][0]
0x1024axisData[2][1]
0x1028axisData[2][2]
0x102CaxisData[2][3]

在这个例子中,数据 axisData[0][0]0x1000 地址上,axisData[0][1] 紧接着存储在 0x1004 地址上,依此类推,直到 axisData[2][3] 存储在 0x102C 地址上。

3. 如何通过指针访问数据

由于二维数组是按行主序存储的,因此我们可以通过指针偏移的方式访问数组元素。比如,给定 axisData[3][4] 数组的起始地址 &axisData[0][0],数组元素将按以下方式访问:

  • axisData[0][0]&axisData[0][0]
  • axisData[0][1]&axisData[0][0] + 1
  • axisData[0][2]&axisData[0][0] + 2
  • axisData[0][3]&axisData[0][0] + 3
  • axisData[1][0]&axisData[0][0] + 4
  • axisData[1][1]&axisData[0][0] + 5
  • ...

4. 总结

在 C 语言中,二维数组是按 行主序(row-major order) 存储的,即所有的行按照顺序连续存储在内存中。对于一个 mxn 的二维数组 arr[m][n],数组的第一个元素 arr[0][0] 存储在内存的起始位置,紧接着是 arr[0][1]arr[0][2] 等,直到 arr[0][n-1]。然后,存储的是 arr[1][0]arr[1][1],以此类推,直到 arr[m-1][n-1]

http://www.lryc.cn/news/542469.html

相关文章:

  • AI时代前端开发技能变革与ScriptEcho:拥抱AI,提升效率
  • 计算机毕业设计SpringBoot+Vue.js美容院管理系统(源码+文档+PPT+讲解)
  • 【LeetCodehHot100_0x01】
  • Qt::MouseButtons解析
  • 跨域问题解释及前后端解决方案(SpringBoot)
  • 4-知识图谱的抽取与构建-4_2实体识别与分类
  • 腾讯云大模型知识引擎×DeepSeek赋能文旅
  • TMDS视频编解码算法
  • C++程序员内功修炼——Linux C/C++编程技术汇总
  • 【数据结构】链表中快指针和慢指针
  • 6_zookeeper集群配置
  • Docker核心概念
  • LD_PRELOAD 绕过 disable_function 学习
  • 如何用JAVA实现布隆过滤器?
  • 游戏开发 游戏开始界面
  • Python解析 Flink Job 依赖的checkpoint 路径
  • Javascript网页设计案例:通过PDFLib实现一款PDF分割工具,分割方式自定义-完整源代码,开箱即用
  • 计算机视觉算法实战——产品分拣(主页有源码)
  • 汽车软件︱AUTO TECH China 2025 广州国际汽车软件与安全技术展览会:开启汽车科技新时代
  • Visual Studio打开文件后,中文变乱码的解决方案
  • Python爬虫selenium验证-中文识别点选+图片验证码案例
  • MySQL后端返回给前端的时间变了(时区问题)
  • 计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+文档+PPT+讲解)
  • 前端性能优化面试题及参考答案
  • 【NLP 37、激活函数 ③ relu激活函数】
  • 量子计算的威胁,以及企业可以采取的措施
  • C#初级教程(5)——解锁 C# 变量的更多奥秘:从基础到进阶的深度指南
  • Pytorch实现之GIEGAN(生成器信息增强GAN)训练自己的数据集
  • 使用PHP接入纯真IP库:实现IP地址地理位置查询
  • 计算机毕业设计SpringBoot+Vue.jst0甘肃非物质文化网站(源码+LW文档+PPT+讲解)