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。

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

  1. c 语言 二维数组地址,C/C++ 关于一维或二维数组首地址表示含义

    C/C++ 关于一维或二维数组首地址表示含义 发布时间:2020-06-26 10:35:21 来源:51CTO 阅读:210 作者:sonissa 这是一个经常会忘却的知识点,最近也一直在吃这方面的 ...

  2. php二维数组取交集,php array交集 PHP二维数组取差集操作方法 - 非主流娱乐网

    php array交集 PHP二维数组取差集操作方法 2019-07-11 23:14:16 来源: 非主流娱乐网责任编辑:小s0条评论 一.需求 PHP 中对二维数组取差集操作. 例如: $arr1 ...

  3. php二维数组取交集,PHP中二维数组怎么取交集

    PHP中二维数组取交集的方法:首先循环其中一个数组:然后使用in_array()函数判断被循环数组的每个元素是否在另外一个数组中:最后输出$out_arr即可. PHP二维数组怎么取交集? 思路,循环 ...

  4. 二维数组元素+地址的思考

    先贴code 二维数组 A[3][2]={1,2,3,4,5,6} A:0x7ffc3cd4ee40*A:0x7ffc3cd4ee40*A[0]:1A+1:0x7ffc3cd4ee4c 二维数组,加了 ...

  5. 如何把一个二维数组的地址赋给一个二维指针?

    int main() { int i = 0, j = 0; int arr[3][5] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }; ...

  6. 二维数组的地址表达方式

    在二维数组中a[0]+1和*(a+0)+1的值都是&a[0][1],所以有两种表示方式,第一中时数组的表示方式, 第二种是指针的方式. #include<iostream> usi ...

  7. 二维数组和指针之间的关系详解

    一.引言 说起二维数组可能首先想到的是各种嵌套的for循环,二维数组的初始化,二维数组的赋值,二维数组的输出等各种问题,当然了,数组的问题永远离不开指针,而二维数组所能联系到的就是二维指针了,此文则是 ...

  8. java二维数组元素_java二维数组,获取整行元素详解

    之前给大家讲过java二维数组获取单个元素方面的知识,下面的话就来给大家讲一下java二维数组获取整行元素方面的知识. 除去获取单个元素和全部元素之外,还可以单独获取二维数组的某一行中所有元素的值,或 ...

  9. php输出二维函数,兼容php二维数组取值函数array_column使用

    PHP5.5发布,其中增加了一个新的数组函数array_column,感觉不错的! 但是低版本PHP要使用,得自己实现: if(!function_exists('array_column')){ f ...

最新文章

  1. JSP WEB开发入门基础到高手进阶教程002
  2. 北京智源人工智能研究院关于征集2019年度智源青年科学家的通知
  3. django 1.8 官方文档翻译: 3-4-2 基于类的内建通用视图
  4. mit risc-v 资料
  5. 怎么解决缺少java.doc_java 生成doc帮助文档时出现的问题
  6. 【python】python中execl的操作
  7. Flutter之Dialog使用和踩坑
  8. python的常量_python常量 (最全常量解析)
  9. vnc远程桌面精灵,细数三款可能你没有使用过的vnc远程桌面精灵
  10. 谈谈自己对移动互联网的看法
  11. bert之我见-attention
  12. 六个步骤搞定学术论文写作!
  13. 汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、
  14. 在IE浏览器中如何直接显示word文档
  15. vscode下git的常见操作
  16. UGUI-ContentSizeFitter之最简单实现maxSize限制
  17. 公式法求递归算法的时间复杂度
  18. 电脑升级到WIN11系统无法打开QQ和TIM?我来教你如何解决
  19. 森林图怎么分析_大地量子 森林火灾 | 遥感+AI 成为森林火灾预防和监测的重要手段...
  20. 高血压患者禁吃葡萄柚

热门文章

  1. 将z-blog改成英文blog所遇到的问题
  2. 步步为营 SharePoint 开发学习笔记系列 七、SharePoint Timer Job 开发
  3. spring cloud eureka服务注册和调用
  4. 关于Linux网卡调优之:RPS (Receive Packet Steering)
  5. 基于Kubernetes的分布式压力测试方案
  6. Create view failed with ORA-01031:insufficient privileges
  7. 高清壁纸:60款可爱的圣诞节电脑桌面壁纸《下篇》
  8. linux mesg 命令详解
  9. python 40位的数减个位数_Python数据分析入门教程(五):数据运算
  10. 如何用python32位开发词典软件_Python如何实现字典?