定义指针数组可以出现大括号吗为什么_定义指针数组可以出现大括号吗为什么不能使用

定义指针数组可以出现大括号吗为什么_定义指针数组可以出现大括号吗为什么不能使用【C语言|数组】数组a、&a、&a[0]、&a[0][0]的区别与联系1. 测试结果分别声明一个一维数组 和二维数组 ,查看各个表达式的类型、地址、与首地址的差值,以及内存地址内存储的 变量值。数组内变量的低8

【C语言|数组】数组a、&a、&a[0]、&a[0][0]的区别与联系
  1. 测试结果

  分别声明一个一维数组 和二维数组 ,查看各个表达式的类型、地址、与首地址的差值,以及内存地址内存储的 变量值。数组内变量的低8位记录数组的行号和列号,其中高4位为行,低4位为列。先看一下测试程序给出的结果。

  一维数组

  vartypeof(var)(void *)(var)offset*(int *)(var)a1int *0x7ffe2034d2d00x000x00&a1int (*)[8]0x7ffe2034d2d00x000x00&a1[0]int *0x7ffe2034d2d00x000x00a1 + 1int *0x7ffe2034d2d40x040x01&a1 + 1int (*)[8]0x7ffe2034d2f00x200x20&a1[0] + 1int *0x7ffe2034d2d40x040x01

  二维数组

  vartypeof(var)(void *)(var)offset*(int *)(var)a2int (*)[8]0x7ffe2034d2500x000x00a2[0]int *0x7ffe2034d2500x000x00&a2int (*)[4][8]0x7ffe2034d2500x000x00&a2[0]int (*)[8]0x7ffe2034d2500x000x00&a2[0][0]int *0x7ffe2034d2500x000x00a2 + 1int (*)[8]0x7ffe2034d2700x200x10a2[0] + 1int *0x7ffe2034d2540x040x01&a2 + 1int (*)[4][8]0x7ffe2034d2d00x800x00&a2[0] + 1int (*)[8]0x7ffe2034d2700x200x10&a2[0][0] + 1int *0x7ffe2034d2540x040x01(a2 + 1) + 1int (*)[8]0x7ffe2034d2900x400x20(&a2 + 1) + 1int (*)[4][8]0x7ffe2034d3500x1000x00(&a2[0] + 1) + 1int (*)[8]0x7ffe2034d2900x400x20

  2. 结果分析

  2.1. 数组名a总是被视为一个一维数组

  一维数组 的类型为 ,而二维数组 的类型为 ,意思是每个数组元素为一个长度为8的数组,如 表示第0个子数组。定义指针数组可以出现大括号吗为什么_定义指针数组可以出现大括号吗为什么不能使用定义指针数组可以出现大括号吗为什么_定义指针数组可以出现大括号吗为什么不能使用

  2.2. a、&a、&a[0]、&a[0][0]值相同

  表达式含义a代表整个数组,值为数组的起始地址&a取整个数组的地址&a[0]数组首元素a[0]的地址。对于一维数组,是数组首元素的地址;对于二维数组,是子维度数组的首地址

  2.3. 数据类型不同

  类型不同体现在做加减运算时表达式含义a + 1下一个元素的地址。对于一维数组,是下一个数组元素地址;对于二维数组,是下一个子维度数组的首地址&a + 1跳过整个数组(不论一维还是多维),相当于指针指向数组首地址 + sizeof(a)处。实际上这部分不属于这个数组&a[0] + 1同a + 1

  3. 测试代码

  测试代码中 传入参数为 ,编译时添加 选项,可以触发编译器类型检测,打印出变量的实际类型。

  测试程序运行后,会按照 表格的形式输出结果,整理编译输出和程序输出可以得到上边的测试结果。

  编译命令

  测试程序源码

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/95269.html

(0)
上一篇 2024年 5月 25日 上午9:10
下一篇 2024年 5月 25日 上午9:21

相关推荐

关注微信