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

二维数组元素的地址

  一维数组元素的地址大家都比较容易理解,但对于二维数组,就很容易搞混了.今天我又被这个问题给弄糊涂了,翻了翻老谭的书本,对这个问题有了更深的认识.

  首先给出一个二维数组a,它的定义为:

    int a[3][4] = {{1,3,5,7}, {9,11,13,15}, {17,19,21,23}};

  a数组包含3个行元素,a[0],a[1],a[2].而每个行元素又是一个一维数组,它包含4个元素.

  从二维数组的角度来看,a代表二维数组首元素的地址,现在的首元素不是简单的整型,而是由4个整型元素所组成的一维数组,因此a代表的是首行(序号为0的行)的首地址.同理,a+1代表序号为1的行的首地址.如果二维数组的首行的首地址为2000,一个整型数据占4个字节,则a+1的值应该是2000+4*4=2016.a+1指向a[1],或者说a+1是a[1]的首地址,*(a+1)等价于a[1].如下图

  a[0],a[1],a[2]既然是一维数组名,则a[0]代表一维数组a[0]中第0列元素的地址,即&a[0][0];同理a[1]的值是&a[1][0],a[2]的值是&a[2][0];

  那么a数组0行1列元素的地址怎么表示呢?a[0]是一维数组名,该一维数组中序号为1的元素的地址显然应该用a[0]+1来表示,如下图.

(a+i)表示的是行指针,a[i]+j表示列指针

 

  前已叙述,a[0]和*(a+0)等价,a[i]和*(a+i)等价.因此a[0]+1和*(a+0)+1都是&a[0][1].进一步分析,a[0][1]的值则为*(a[0]+1),*(*(a+0)+1)或者*(*a+1).

  通用的表示:*(a[i]+j),*(*(a+i)+j)是a[i][j]的值.可以这样理解:行指针a纵向移动i到达到a+i,然后解引用得到*(a+i),即a[i]——列指针,然后列指针a[i]横向移动j步到达(a[i]+j)),最后解引用得到*(a[i]+j),即a[i][j];

  更多例子参见下表.

   一个有趣的现象是a+1和*(a+1)都是2016,其实不难理解,它们都是地址,a+1指向a中序号为1的行的首地址,而*(a+1)是a[1],指向的是a[1][0],两者实际上是相同的位置.

   书中用一个军训班长和排长点名的问题形象地说明了这类的问题.

  一个排分3个班,每个班站成一行,这样就相当于一个二维数组.为方便比较,班和战士的序号也从0开始.班长点名以人为单位,从第0个战士开始,移动一步走过一个战士.排长点名以班为单位,检查该班是否到齐,排长每走一步走过一班的战士.班长的移动是横向的,排长的移动是纵向的.班长"指向"战士,排长"指向"班,班长相当于列指针,排长相当于行指针.

转载于:https://www.cnblogs.com/Stephen-Qin/p/7374908.html

相关文章:

  • 大话2烧法助手_大话西游2说出你自己的服务器名称,看看有没有一起玩耍的小伙伴...
  • 运行项目时报Server Tomcat v8.0 Server at localhost failed to start.
  • web安全
  • python 元组_python学习04-2:元组
  • python-day27--hashlib模块-摘要算法
  • 简述python执行原理_Python解释执行原理分析
  • 关于javascript 的reduce方法
  • python合法标识符_python合法标识符要求是什么
  • 不会英语学python_不会英语能不能学编程
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • 不同的电脑打印预览不同怎么解决_华为笔记本电脑怎么样?Matebook 14与Matebook 13的有哪些不同...
  • python 相对路径导入_从Python中的相对路径导入
  • css揭秘pdf
  • python手机编程输入法_用Python写一个拼音输入法
  • gcc-linaro-arm-linux-gnueabihf交叉编译器配置
  • ➹使用webpack配置多页面应用(MPA)
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Mybatis初体验
  • PHP面试之三:MySQL数据库
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Vue实战(四)登录/注册页的实现
  • 创建一个Struts2项目maven 方式
  • 计算机常识 - 收藏集 - 掘金
  • 看域名解析域名安全对SEO的影响
  • 手写一个CommonJS打包工具(一)
  • 通过几道题目学习二叉搜索树
  • 微信公众号开发小记——5.python微信红包
  • 智能合约开发环境搭建及Hello World合约
  • 仓管云——企业云erp功能有哪些?
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • # 数据结构
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (C语言)逆序输出字符串
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)程序员技术练级攻略
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Core 版本不支持的问题
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET是什么
  • .NET中winform传递参数至Url并获得返回值或文件
  • /proc/vmstat 详解
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [04]Web前端进阶—JS伪数组
  • [Android]如何调试Native memory crash issue
  • [AR Foundation] 人脸检测的流程
  • [ARM]ldr 和 adr 伪指令的区别
  • [codevs 1515]跳 【解题报告】
  • [HTML]Web前端开发技术6(HTML5、CSS3、JavaScript )DIV与SPAN,盒模型,Overflow——喵喵画网页