与前后增量运算符混淆

May*_*ari 2 c operators lvalue

你好我正在学习C编程语言的基础知识,最近我研究了post和pre递增/递减运算符以及lvalue和rvalue,下面的程序显示了一个错误,需要左值,根据我应该给出值6,任何人都可以解释原因吗?

int main(){
  int x = 8, y;
  y = --x--;
  printf("y=%d",y);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

请解释一下,为什么会这样?

Pav*_*dka 6

好吧,让我们看看发生了什么--x--.首先,后减量执行:--(x--). (x--) = 7.在此操作的结果被放置到原始结构之后: --7- 没有意义 - 因此您得到lvalue required错误


Dee*_*epu 5

该语句 y = --x--;将使您在编译时出现以下错误Clvalue required。这是因为后减量运算符- rvalue对变量x进行运算后将返回a。因此,没有左值可以执行预减运算符-之后。

但是,这是一个点CC++不同。在C下面的语句中也会给您同样的错误lvalue required

y = (--x)--;
Run Code Online (Sandbox Code Playgroud)

但是在C++语句y = (--x)--;中将编译良好,并且yis 的值7。因为与C不同,C ++ lvalue对变量x执行预减运算符后返回a。