-4

为什么减量运算符--在执行时不会将值降低 1?

int a = 20;
int c ;

c = a--;

检查c现在的值,它应该是 19,但结果是 20。我错过了什么?

4

4 回答 4

1

a--是Post-Decrement,你需要--aPre-Decrement。请阅读Wiki上的增量和减量运算符

以下 C 代码片段说明了前后递增和递减运算符之间的区别:

int  x;
int  y;

// Increment operators
x = 1;
y = ++x;    
// x is now 2, y is also 2
y = x++;
// x is now 3, y is 2

// Decrement operators
x = 3;
y = x--;    
// x is now 2, y is 3
y = --x;    
// x is now 1, y is also 1
于 2014-12-30T12:12:44.897 回答
0

您正在使用的称为postfix运算符。在赋值运算符使用现有=值完成执行后,它将被执行[递减值] 。

需要明确的是,在后期减量的情况下,..--一旦包括该操作数在内的其他评估完成,就会评估运算符并安排减量。这意味着,操作数的现有值用于其他评估[in =] 然后该值减小

如果需要,请尝试打印a自身的值。它将打印递减的值。


编辑:

如果我在回答中选择的词语造成了任何混淆,请参考c99标准,第 6.5.2.4 章,[强调我的]

[对于增量] 后缀 ++ 运算符的结果是操作数的值得到结果后,操作数的值递增 [……]

后缀 -- 运算符类似于后缀 ++ 运算符,不同之处在于操作数的值是递减的(即从中减去相应类型的值 1)。

于 2014-12-30T12:14:00.587 回答
0

您应该使用 --a (前减量运算符),您正在使用后减量运算符 a--

后缀 -- 运算符的结果是操作数的值。作为一个副作用,操作数对象的值被递减(即,相应类型的值 1 被减去)。

于 2014-12-30T12:14:04.750 回答
0

您正在使用后期减量。后递减意味着首先使用变量中的值或任何东西,然后递减变量中的值。a所以在这种情况下,将分配给的第一个值c。并且减量完成。您可以检查打印的值a

于 2014-12-30T12:18:16.537 回答