根据“ C - A Reference Manual”,左值是一种表达式,它以可以检查或更改对象的方式引用对象。
例如,
int ranks[10];
然后是
ranks
和ranks+3
左值吗?由于ranks
(指向数组第一个元素的指针)和ranks+3
(指向数组第四个元素的指针)是指对象,我想它们是左值-还是不是左值? 最佳答案
ranks+3
不是左值,原因与1+3
不是左值相同;结果只是一个数字(指针)值,而不是对对象的引用。
换句话说,如果ranks + 3
的结果是0xdeadbeef
,则无法编写
0xdeadbeef = 10;
出于同样的原因,你不能写
4 = 10;
但是,
*(ranks+3)
是一个左值,因为您正在取消引用该指针值。它是ranks
数组的第4个元素,等效于ranks[3]
。同样,除了在
ranks
或一元sizeof
运算符的上下文中,&
也不是左值。由于在大多数情况下数组表达式都会“衰减”到指针表达式,因此您再次陷入困境。ranks = 10;
等价于
0xdeadbeef = 10;
同样,您必须取消引用
ranks
作为*ranks
或ranks[0]
使其成为左值。关于c - 这些指针是左值吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39001202/