c - 我无法弄清楚数组名称的意义
问题描述
我最近在这里发布了一些关于数组名称的问题。
感谢很多人,现在我知道数组名不是指针,也知道数组名是不可修改的左值。
我还有一个关于数组的问题。
- 有人告诉我,数组名称被转换为数组第一个元素的地址。
所以我知道数组名称是这样返回的。
int arr[10];
arr == &arr[0];
但是如果是对的,那不是因为返回值是地址值,而是左值吗?
我还是误会了吗?
解决方案
有人告诉我,数组名称被转换为数组第一个元素的地址。
这适用于对出现数组标识符的表达式求值的一部分,并且有一些例外。
所以我知道数组名称是这样返回的。
int arr[10]; arr == &arr[0];
自动转换为指针 -当它发生时- 类似于您的表达式&arr[0]
(实际上首先取决于该转换),但将其视为立即永久执行的转换是不正确的数组被声明。数组的标识符标识数组,而不仅仅是它的地址或它的第一个元素。特别是,此处自动转换为指针因子的例外情况,尤其是 ifarr
是数组的标识符,则sizeof(arr)
计算结果为该数组的大小,而不是指针的大小。
但是如果是对的,那不是因为返回值是地址值,而是左值吗?
这是不对的。数组的标识符是左值的原因是它指定了数组。
推荐阅读
- agora.io - switchDevice() error Failed to GetUserMedia "–" NotReadableError "– 0 –" 无法开始捕获视频轨道
- java - 如何使用 ActionListener 更改 JPanel 的颜色
- asp.net - 如何为 Asp.Net Core 3.1 中的所有路由 URL 添加动态前缀?
- java - 反转偶数位置词的逻辑
- laravel - laravel/elequent - 模型和关系
- azure - 如果复制列表中的服务器被禁用和删除,对本地服务器故障转移后正在运行的 VM 是否有任何影响?
- mongodb - 容器之间的通信在 docker 网络中不起作用
- c++ - 如何从 long long 转换为 DRAWITEMSTRUCT*
- python - 将参数传递给列表推导中的函数
- json - 有没有办法将 {"number1":5L,"number2":5L} 反序列化为具有长字段的类?