繁体   English   中英

了解C中的增量运算符

[英]Understanding the increment operator in C

为什么以下代码在C中是非法的?

y = (w + x)++;

根据我的书,这是非法的,但我不明白为什么。

i++ ,的 i被改变。 执行后, i的值为1加上其先前的值。 但是,您无法在w+x存储值,因此您无法执行以下任何操作,所有这些操作(如果它们起作用)将或多或少地具有相同的效果:

w+x = w+x+1;
w+x += 1;
(w+x)++;

可以放在作业左侧的东西通常称为左值l代表left )。 简洁的说法是++只能应用于左值,而w+x不是左值。 您可以在此问题及其答案中了解有关左值(以及其他类型的值)的更多信息:

根据Dennis M. Ritchie的书: “ The C Programming Language”

2.8增减运算符

(第44页)

递增和递减运算符只能应用于变量。 (i + j)++类的表达式是非法的。 操作数必须是算术或指针类型的modifiable lvalue

因为表达

i++;

等效于:

i = i + 1;

像这样的表达式:

(i + j)++;

类似于:

(i + j) =  (i + j) + 1;  // meaning less

看起来意义不大,我们无法修改表达式。

相关:在gcc 4.4.5中可能想知道的一个有趣的错误是表达式j = ++(i | i); 会产生l值错误的编译。 读取: j = ++(i | i); j = ++(i & i); 应该有一个错误:左值?

阅读有关(1) 表达式必须是可修改的左值错误和(2)msdn docs 的可修改左值的信息左值和右值

y = x++返回变量x的增量值。

y = (x + z)++失败,因为(x + z)不是变量。

这是非法的,因为(w+x)不是合法的左侧值。

左侧值是可以分配给的值(即变量)。

后增量需要一个l值 ,而w+x不是。

这是非法的,因为(x+y)不是变量。

考虑

a++a = a + 1

(x+y)++是什么? (x+y) = (x+y) + 1

增量和减量后需要l-value (例如左侧的变量)。 w+x不是变量。 w+x的增量就像增量ig 3 + 4 ,这是非法的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM