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

数组名本质揭秘:首元素地址的两大例外

引言

本文探讨了数组名的本质及其两种特殊情况。数组名通常表示首元素地址,但在sizeof(数组名)和&arr;数组名两种情况下例外:前者计算整个数组大小,后者获取整个数组地址。通过测试验证,普通数组名和首元素地址的运算步长为元素大小(4字节),而&arr;数组名的运算步长则为整个数组大小(40字节)。这两种特殊情况是理解数组名本质的关键。


本文开始

当我们想要拿到数组的首元素的地址,可以采取以上方法,&arr[0]就是取数组下标为0的元素的地址,即首元素的地址

但是其实 arr数组名本身就是数组首元素的地址,我们可以测试一下

在x86环境下的测试结果:

我们发现通过数组名和数组首元素的地址打印出的结果是一摸一样的,所以数组名其实本质上就是数组首元素的地址

这时有人会问,如果数组名是数组首元素的地址,那么下面这段代码怎么解释呢?

这段代码输出的结果是40,如果数组名是是数组首元素的地址,那这里通过sizeof求地址的长度,输出的应该是4或者8(在x86环境下地址大小为4个字节,x64环境下地址大小为8个字节),为什么这里输出的是40

其实,数组名是数组首元素的地址是对的,只是有两个例外:

sizeof(数组名):这里的数组名例如arr,表示的是整个数组,输出的是整个数组在内存中所占空间的大小,在这就是40个字节

&数组名:这里的数组名例如arr,表示的是整个数组的地址,通过&arr取出的是整个数组的地址,数组的地址和数组首元素的地址是有区别的!!!

除此之外,任何地方的数组名都是数组首元素的地址

我们来看看一下代码的输出结果:

结果如下:

三个结果一摸一样,那到底arr和&arr到底有什么区别呢?

输出结果:

这里&arr[0]+1和&arr[0]相差4个字节,arr+1和arr也是相差4个字节,因为&arr[0]和arr都是首元素的地址,在arr数组中一个元素是4个字节

但是&arr和&arr+1相差40个字节,因为跳过的是一整个数组,整个数组的大小是10个整型,即40个字节

总结:所以,数组名是首元素地址,但是有两个例外,分别是sizeof(数组名)、&数组名

http://www.jsqmd.com/news/465964/

相关文章:

  • 南京大境空间设计是值得推荐的装修设计公司吗,品牌实力如何? - 工业品网
  • C语言指针的引入
  • 网站提示“Table xxx.pb_content doesnt exist”(数据表不存在)问题|已解决
  • JWT详解:从登录认证到令牌验证
  • 大厂集体“捞虾”:腾讯派出了它的先遣队
  • STM32开发板
  • 机器学习做材料性能的回归预测氧离子电导率模型需要按材料成分分组划分训练测试集吗?
  • 2026探寻常德市淘发源生物科技,从信息看其口碑和专业性 - 工业设备
  • Parse error 语法错误:10种常见原因 + 修复方法
  • Python基于flask+uniapp微信小程序的校园学生宿舍报修管理系统
  • 面试别再只说“我会写用例”:测试黑话升级,薪资翻倍秘籍
  • 2026年3月新疆门窗维修服务团队综合评测与选购指南 - 2026年企业推荐榜
  • [特殊字符] 从零搭建网页项目:从创建到预览全流程
  • ByteBuddy系列文章目录
  • ASP.NET Core面试精讲系列八
  • 访问后台路径(admin.php)时,提示“403 Forbidden”,无法进入后台,前台可正常访问原因分析
  • Python基于flask+uniapp微信小程序的校园学生社团签到系统 可视化
  • Python开发英语记忆单词软件
  • Python基于flask+uniapp微信小程序的校园智能垃圾分类回收预约平台
  • 氯代烷烃源头厂家盘点:2026年谁主性价比之巅? - 2026年企业推荐榜
  • 工业智能网关+物联网云平台的一体化解决方案
  • 2026年毕业季降AI工具怎么选?亲测比话降AI效果实录
  • Python基于Django的汉语文本阅读难度分级系统(附源码,文档说明)
  • Ppt设计资源合集
  • Spring Framework 中文官方文档
  • 《AI原生应用自然语言理解:突破局限,创造无限可能》
  • Python基于flask+uniapp微信小程序的校园服务闲置物品交易失物招领系统平台
  • 研发工程师晋升背后的逻辑:一些背后的思考与行动指南
  • areal异步技术分析
  • 2026年DeepSeek写的论文AI率98%怎么办?实测从98%降到8%的全过程