首页 > 解决方案 > 我无法弄清楚数组名称的意义

问题描述

我最近在这里发布了一些关于数组名称的问题。

感谢很多人,现在我知道数组名不是指针,也知道数组名是不可修改的左

我还有一个关于数组的问题。

  1. 有人告诉我,数组名称被转换为数组第一个元素的地址。

所以我知道数组名称是这样返回的。

int arr[10];
arr == &arr[0];

但是如果是对的,那不是因为返回是地址值,而是左值吗?

我还是误会了吗?

标签: carraysimplicit-conversionrvalueunary-operator

解决方案


有人告诉我,数组名称被转换为数组第一个元素的地址。

这适用于对出现数组标识符的表达式求值的一部分,并且有一些例外。

所以我知道数组名称是这样返回的。

int arr[10];
arr == &arr[0];

自动转换为指针 -当它发生时- 类似于您的表达式&arr[0](实际上首先取决于该转换),但将其视为立即永久执行的转换是不正确的数组被声明。数组的标识符标识数组,而不仅仅是它的地址或它的第一个元素。特别是,此处自动转换为指针因子的例外情况,尤其是 ifarr是数组的标识符,则sizeof(arr)计算结果为该数组的大小,而不是指针的大小。

但是如果是对的,那不是因为返回值是地址值,而是左值吗?

这是不对的。数组的标识符是左值的原因是它指定了数组。


推荐阅读