【发布时间】:2019-08-01 14:38:39
【问题描述】:
我最近在这里发布了一些关于数组名称的问题。
感谢很多人,现在我知道数组名不是指针,也知道数组名是不可修改的l-value。
我还有一个关于数组的问题。
- 有人告诉我,数组名被转换成数组第一个元素的地址。
所以我知道数组名称是这样返回的。
int arr[10];
arr == &arr[0];
但是如果是对的,那不就是一个l-value,因为返回的值是一个地址值吗?
我还是误会了吗?
【问题讨论】:
-
左值是一个可能指定的值,即别名一个对象。指针不是它指向的对象的左值,您必须跟随指针,即取消引用它
-
arr是一个左值。在许多情况下,它会衰减为指向它的第一个元素的指针,但它是一个左值。 -
您不能更改
&arr[0](即arr = NULL;是非法的)。可以更改地址&arr[0]的内容(即*(&arr[0]) = 42;(同arr[0] = 42;或*arr = 42;)
标签: c arrays implicit-conversion rvalue unary-operator