</p> 前缀++和后缀++都能使变量的质ё僮裒加1个单元,可是它们所代表的表达式的值却不不异,前者是变量增添后的值,后者是变量还未增添的原先值。例如i,j为整型变量,且i的值为4,以下分袂用①和②表记的代码将使j获得不合的值:
+ u' ~* C( @/ C ①j=++i ;0 `, \5 f2 j6 G7 {- j- E+ Y1 U0 B
②j= i++
$ _" a6 \+ p, p x: ?9 l Q3 [ 都使变量i的值变为5,但①使j的值为5;②使j的值为4。
& y$ e+ O8 h- J$ p+ F# O0 R 前缀--: t6 k- |% q& H8 x" [
前缀-- 的一般形式是
f- F' z1 b( A+ Q; L: o! V9 j) \ --变量+ T9 k& W6 k. A& I* B
前缀--使变量的情削减(或猬缩猬缩后退)l个单元,并以变量的新值为表达式“--变量”的运算结不美不美观。) q# F* T. k. N4 o# P2 Z
后缀--, J; M, A9 _- X2 T
后缀-- 的一般形式是/ \: w! E$ h9 }! \2 `" K
变量--5 V5 Z- M5 z8 o6 y' ]
后缀-- 浸染于变量时,以该变量的值作为表达式“变量--”的运算结不美不美观,即先取其值为结不美不美观,然后用与前缀--不异的编制削减该变量1个单元。; [) B' r5 p4 z- |. s7 Q
后缀-- 与前缀-- 的区别近似于后缀++与前缀++的区别。近似前面的例子,依旧假定i的值为4,两代码
$ H; z2 R+ ?# j3 @ ③j= --i
# M @3 a' e+ u b, _1 u, ` ④j=i--
0 W# y* T1 f9 c4 k/ \/ R 都使变量i的值变为3,但③使j的值为3;④使j的值为4。+ ?8 Z* W, K# Q! w
使用++和--运算符时,其运算对象仅合用于变量,不能是常量等数据值表达式。如 4++或(i+j)++都是不正当的。
5 f# s0 h) a8 n! @$ Z, ^ ++和--是带有副浸染的运算符。建议读者不要在一个表达式中对统一变量多次使用这样的运算符,可能会发生意想不到的结不美不美观。如i的值为4,对表达式
0 P3 B: N* l' P5 K' B$ E& P% w (i++)+(i++)
( T$ u; j$ o: [! a 可能认为它的值为 9(+5)。然而在 TURBO C和MS C系统中,它的值为8。而表达式
( a: E$ f. G) p/ ]( j (++i)+(++i)
+ E7 f- k& H+ {3 U! ` 的值为12。这是因为这些系统在措置 i++时,先使用 i的原值计较整个表达式,然后再让i持续两次自增;措置++i时,在计较表达式值之前,先对 i执行两次自增,然后才计较表达式。放前一个表达式的值为8,后一个表达式的值为12。
5 J9 T, L# ^, ]* h5 d 因+与++(-与--近似)是两个不合运算符,对于近似表达式i+++j会有不合的理解:(i++)+ j或i+(++j)。 C编译的措置编制是自左至右让尽可能多的字符组成一个正当的句法单元(如标识符、数字、运算符等)。是以,i+++j被诠释成(i++)+j,而不是i+(++j)。
* c z( Z( l& G% ]* f2 t 增1(++)和减1(--)运算符的连络标的目的是自右至左的。 |