我最近在这里发布了一些关于数组名称的问题。
感谢很多人,现在我知道数组名不是指针,也知道数组名是一个不可修改的l-value。
我还有一个关于数组的问题。
- 有人告诉我,数组名被转换成数组第一个元素的地址。
所以我理解数组名是这样返回的
int arr[10];
arr == &arr[0];
但如果它是正确的,它不是一个l-value,因为返回的值是一个地址值吗?
我还是误会了吗?
最佳答案
I was told that the array name is converted into the address of the first element of the array.
这适用于出现数组标识符的表达式求值的一部分,并且有少数异常(exception)。
So I understand that the array name is returned like this.
int arr[10]; arr == &arr[0];
自动转换为指针 - 发生时 - 类似于您的表达式 &arr[0]
(实际上取决于第一个中的转换地方),但将其视为在声明数组时立即并永久执行的转换是不正确的。数组的标识符标识数组,而不仅仅是它的地址或它的第一个元素。特别是这里自动转换为指针因子的异常(exception)情况,尤其是如果 arr
是数组的标识符,则 sizeof(arr)
的计算结果为该数组的大小,而不是指针的大小。
But if it is right, isn't it an l-value because the returned value is an address value?
这是不的。数组标识符是左值的原因是它指定了数组。
关于c - 我无法弄清楚数组名称的意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57311489/