c - 传递数组名称时 sizeof 如何工作
问题描述
为什么 sizeof(array_name) 是数组的大小,而 sizeof(&a[0]) 是指针的大小,即使将数组名传递给函数时,传递的是数组开头的位置。
解决方案
在大多数表达式中,当使用数组时,它会自动转换为指向其第一个元素的指针。
有一个特殊规则sizeof
:当数组是 的操作数时sizeof
,它不会自动转换为指针。因此,sizeof array_name
给出数组的大小,而不是指针的大小。
此规则也适用于一元运算&
符:&array_name
是数组的地址,而不是指针的地址。
此外,如果数组是用于初始化数组的字符串文字,则它不会转换为指针。字符串文字用于初始化数组。
对此的规则是 C 2018 6.3.2.1 3:
除非它是sizeof运算符的操作数,或一元&运算符,或者是用于初始化数组的字符串字面量,否则类型为“array of type ”的表达式将转换为类型为“pointer to type ”的表达式指向数组对象的初始元素并且不是左值。如果数组对象具有寄存器存储类,则行为未定义。
推荐阅读
- arrays - 如何根据 Google 表格中另一个单元格中的值填充单元格(高级?)
- ios - 如何让我的电脑麦克风在按下按钮时工作?-- Xcode 11
- javascript - Edge 和 canvas.toDataUrl() 给出不正确/截断的值;
- javascript - 尝试加载大视频但收到“503 服务不可用”
- jquery - 如何检查 div 中的段落数并使用 jQuery 删除其中一些?
- video-streaming - getUserMedia 如何提高音频质量?如何使音频停止回声?
- vue.js - 如何使用 VueJS 以编辑形式获取旧图像?
- c - 在函数或文件中声明 const 变量?
- c++ - C++ 目录列表表现得很奇怪
- reactjs - 提交表单后 React Redirect 不重定向