【发布时间】:2014-03-17 21:38:49
【问题描述】:
在这里查看其他问题,我发现 C 中的预增量运算符返回右值,而不是左值。但是,在尝试下面的代码时
int a=35;
printf("%d %d %d %d %d",a++,a,++a,a++,++a);
我期待输出
38 39 38 36 36
但我得到了输出
38 39 39 36 39
如果pre-increment返回rvalue,那么为什么打印'a'的最终值(意味着返回lvalue)而不是执行增量后立即返回的值?
【问题讨论】:
-
上帝这个问题应该回答多少次?这是一种未定义的行为
-
另外,这与右值和左值无关。简而言之,左值是您可以分配的值,右值是您无法分配的值。你不能写
++a=5,因为这是一个右值。您将左值和右值与从左到右或从右到左的关联性混淆了。 -
@AswinMurugesh 但是,printf() 不会将参数推入堆栈吗?那样的话,应该定义评估的顺序??
-
“我假设左值被返回,因为当我试图追踪评估顺序时”:同样,右值/左值与评估顺序无关。这并不意味着左或右。
标签: c lvalue rvalue pre-increment