关于二维数组取地址加以或减一解引用问题

int main() 
{ int aa[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };  int *ptr1 = (int *)(&aa + 1);  int *ptr2 = (int *)(*(aa + 1));    printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));system("pause");return 0;
}

很显然aa是一个二维数组,很多人把二维数组抽象的理解成一个矩阵,如

[1,2,3,4,5],
[6,7,8,9,10],

不能说这是错误,这种思维不利于对二维数组更好地理解,那我们该怎么理解呢?维度是空间的一个概念,我们可以抽象的理解为二维空间是由一维空间组成,三维空间是由二维空间组成,同理,二维数组,其实是由多个一维数组组成的,这个二维数组是两行五列,就是说这个二维数组是由2个元素个数为5的一维数组组成,设这两个一维数组为b[5],c[5],令b[5]={1,2,3,4,5},c[5]={6,7,8,9,10}。接下来开始分析代码:

int *ptr1 = (int *)(&aa + 1);

这个&aa+1怎么理解呢?&aa指二维数组aa的地址,&aa+1就是指向下一个数组的首地址(在这里我们可以形象的理解为元素aa[2][5]的地址,很显然aa[2][5]已经越界了,这里只是便于理解而特殊引用的),然后将其进行int*强制转换赋给ptr1。

int *ptr2 = (int *)(*(aa + 1)); 

aa在单独使用时代表数组aa的首地址,加一表示首地址加一,即指向下一个元素地址,即第二个元素地址(即c[5]的地址,同样代表c[0]地址),再将其解引用后强制转换为int*型赋给ptr2。

printf("%d,%d", *(ptr1 - 1),*(ptr2 - 1));

ptr1-1就表示下一个数组首元素aa[2][5]的前一个元素的地址,即本数组最后一个元素aa[2][4]的地址,解引用后就是10;ptr2表示c[5]的地址,也是c[0]的地址,减一表示指向前一个数组最后一个元素的地址,即b[4]的地址,解引用后就是5。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rand和srand的用法

首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。rand(产生随机数)表头文件: #include定义函数 :int rand(void)函数说明 :因为rand的内部实现是用线性同余法做的,他不是真…

repeating 路由_CSS中带有示例的repeating-linear-gradient()函数

repeating 路由Introduction: 介绍: So far, we have learned so many functions but learning never gets enough, therefore as a good developer, we must learn as many functions as we can and know their behavior with the help of practical implementati…

万字详解|手撕 9大排序算法!

0. 前言大家好,我是多选参数的程序锅,一个正在捣鼓操作系统、学数据结构和算法以及 Java 的失业人员。数据结构和算法我已经学了有一段日子了,最近也开始在刷 LeetCode 上面的题目了,但是自己感觉在算法上还是 0 ,还得…

INF文件修改注册表

INF是一个用于安装驱动程序的文件,是文本格式的。里面记录着驱动程序的所有相关资料,随便打开一个INF文件度可看到很多奇奇怪怪的东西,其实这一点也不奇怪,因为每一项都有特定的含义,比如从VERSION一项就可以看出支持的…

.Net判断一个对象是否为数值类型探讨总结(高营养含量,含最终代码及跑分)...

前一篇发出来后引发了积极的探讨,起到了抛砖引玉效果,感谢大家参与。 吐槽一下:这个问题比其看起来要难得多得多啊。 大家的讨论最终还是没有一个完全正确的答案,不过我根据讨论结果总结了一个差不多算是最终版的代码,…

ai怎么约束每个字的大小_人工智能的约束满意问题

ai怎么约束每个字的大小Constraint Satisfactory problems, as the name suggests are the problems which have some constraints which need to be satisfied while solving any problem. In simpler words, we can say that while solving any problem or changing any stat…

一个多月的时间,终于把这件事做完了!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)关注我的小伙伴都知道,前段时间磊哥搞了一个免费的模拟面试,但因为工作和(面试&#xff…

简易电子密码锁制作

看到电影里面的保险箱用到的密码锁,于是心血来潮动手做了一个简单的密码锁,其有3次输入的机会,全错的话便进入死循环,一直警报,任何操作都无效,除了复位操作哈。所需素材:51单片机、1602液晶、蜂…

漫画:什么是红黑树?(整合版)

前段时间,小灰发布了红黑树相关的文章,分成上下篇来讲解。这一次,小灰把两篇文章做了整合,并且修正了红黑树删除部分的图片错误,感谢大家的指正。————— 第二天 —————————————————二叉查找树&a…

PHP高并发高负载系统架构

2019独角兽企业重金招聘Python工程师标准>>> 一、高并发和高负载的约束条件 硬件部署操作系统Web 服务器PHPMySQL测试二、解决之道——硬件篇 处理能力的提升:部署多颗CPU,选择多核心、具备更高运算频率、更大高速缓存的CPU; 处理…

Java ObjectInputStream registerValidation()方法与示例

ObjectInputStream类registerValidation()方法 (ObjectInputStream Class registerValidation() method) registerValidation() method is available in java.io package. registerValidation()方法在java.io包中可用。 registerValidation() method is used to register an ob…

电脑系统越来越慢,怎么删除临时文件

1.关闭"休眠"方法:打开[控制面板]→[电源选项]→[休眠],把"启用休眠"前面的勾去掉说明:休眠是系统长时间一种待机状态,使您在长时间离开电脑时保存操作状态,如果您不是经常开着电脑到别处去的话,那就把它关了吧!☆立即节省:256M2.关闭"系统还原"…

线性方程组的矩阵表示_用矩阵表示线性方程组

线性方程组的矩阵表示A Linear Equation can be represented in matrix form using a: 线性方程可以使用以下形式以矩阵形式表示 : Coefficient Matrix 系数矩阵 Variable Matrix and 可变矩阵和 Constant Matrix 常数矩阵 The System of linear equation in three…

为easyui添加多条件验证

easyui的验证框架,validatebox不能有效的支持多个条件的验证,比如中文用户名,既要验证其是中文,又要验证其长度不超过6位时便显得很繁琐,需要反复的为easyui添加验证规则。 在此实现一个多个条件验证的验证规则&#x…

图解|查找数组中最大值的5种方法!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)我们在一些特定场景下,例如查询公司员工的最高薪资,以及班级的最高成绩又或者是面试中都会遇到查找最…

学习C语言,要从入门到精通

1、学习C语言,要从入门到精通,需要读哪些书(从简单的到难的排序,越详细越好,最好都能注释下选择这本书的理由)? 入门阶段:还是老谭那本。 、、理由:虽然不能说它写得有多…

程序设计爬楼梯问题_楼梯案例:解决楼梯问题的C ++程序

程序设计爬楼梯问题A child is running up a staircase with N steps, and can hop 1 step, 2 steps or 3 steps at a time. Implement a method to count how many possible ways the child can run up to the stairs? You need to return number of possible ways W. 一个孩…

JDK15正式发布,新增功能预览!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)JDK 15 在 2020 年 9 月 15 号正式发布了,这次发布的主要功能有:JEP 339:EdDSA 数字签名…

[LeetCode] Longest Consecutive Sequence 求解

为什么80%的码农都做不了架构师?>>> 题目 Given an unsorted array of integers, find the length of the longest consecutive elements sequence. For example, Given [100, 4, 200, 1, 3, 2], The longest consecutive elements sequence is [1, 2, …

怎么在Word中插入歌曲

1、菜单栏 -> 插入 -> 对象 -> windows media player -> 右键 -> 属性 -> 自定义 -> 选择歌曲完整路径 -> 选择模式 -> invisible(使视频框隐藏)退出设计模式最后别忘了保存2、菜单栏 -> 工具 -> 宏 -> 宏 -> 宏…