根据“ C - A Reference Manual”,左值是一种表达式,它以可以检查或更改对象的方式引用对象。

例如,

int ranks[10];


然后是ranksranks+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作为*ranksranks[0]使其成为左值。

关于c - 这些指针是左值吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39001202/

10-11 03:35