关于C语言中自增和自减运算符的使用及注意事项

++是自增运算符,是单目运算符,其作用是使单个变量的值增1。它有两种使用情况:
1)前置:++i,先执行i=i+1,再使用i值;
2)后置:i++,先使用i值,再执行i=i+1。
例如:
j=3; k=++j;
执行“k=++j”语句后,k=4,j=4。上述语句等效为:
j=3; j=j+1; k=j;
再如:
j=3; k=j++;
执行“k=j++”语句后,k=3,j=4。上述语句等效为:
j=3; k=j; j=j+1;


--是自减运算符,是单目运算符,其作用是使单个变量的值减1。它有两种使用情况:
1)前置:--i,先执行i=i-1,再使用i值;
2)后置:i--,先使用i值,再执行i=i-1。
例如:
j=3; k=--j;
执行“k=--j”语句后,k=2,j=2。上述语句等效为:
j=3; j=j-1; k=j;
再如:
j=3; k=j--;
执行“k=j--”语句后,k=3,j=2。上述语句等效为:
j=3; k=j; j=j-1;


注意:
1)自增和自减运算符,只能用于变量,不能用于常量和表达式。例如5++,--(a+b)等都是非法的。

也可用在指针变量中,使指针向上或向下一个地址。


2)表达式k=-i++等效于k=(-i)++还是k=-(i++)因为负号运算符和自增运算符优先级相同,哪一个
正确就得看结合方向。自增、自减运算符及负号运算符的结合方向是从右向左。因此,上式等效于
k=-(i++);若i=5,则表达式k=-i++运算之后k的值为-5,i的值为6。此赋值表达式的值即为所赋的
值-5。不要因为k=-i++等效于k=-(i++)就先做“++”运算!这里采用的是“先用后变”,即先拿出i

的值做负号“-”运算,把这个值赋给变量k之后变量i才自增。


3)C语言允许在一个表达式中使用一个以上的赋值类运算,包括赋值运算符、自增运算符、自减运
算符等。这种灵活性使程序简洁,但同时也会引起副作用。这种副作用主要表现在:使程序费解,
并易于发生误解或错误。
main( )
{
int i,j;
   i=3; 
j=(i++)+(i++)+(i++); 
printf(“\nj=%d,”j);
   i=3; 
printf(“j=%d”,(i++)+(i++)+(i++));

在TC3.0上运行,其结果则是:j=9,j=12,究其原因,“先用后变,先变后用“中的“先”和“后”是一个模糊的概念,很难给出顺序或时间上的准确定论。“先”到什么时候,“后”到什么程度?没有此方面的详细资料可供查询。克服这类副作用的方法是,尽量把程序写得易懂一些,即将费解处分解成若干个语句。如:k=i+++j:可写成k=i+j:i++:而类似(i++)+(i++)+(i++)这类连续自增、自减的运算最好不要使用,以避免疑团的出现,同时也可减少程序出错的可性能。

因此,在C程序设计中,要慎重使用自增、自减运算符,特别是在一个表达式中不要多处出现变量的自增、自减等运算。

你可能感兴趣的:(C语言)