自增自减运算符
文章插图
这是一类特殊的运算符 , 自增运算符++和自减运算符--对变量的操作结果是增
加1和减少1 。例如:
--Couter;
Couter--;
++Amount;
Amount++;
看这些例子里 , 运算符在前面还是在后面对本身的影响都是一样的 , 都是加1或
者减1 , 但是当把他们作为其他表达式的一部分 , 两者就有区别了 。运算符放在
变量前面 , 那么在运算之前 , 变量先完成自增或自减运算;如果运算符放在后
面 , 那么自增自减运算是在变量参加表达式的运算后再运算 。这样讲可能不太
清楚 , 看下面的例子:
num1=4;
num2=8;
a=++num1;
b=num2++;
a=++num1;这总的来看是一个赋值 , 把++num1的值赋给a , 因为自增运算符在变
量的前面 , 所以num1先自增加1变为5 , 然后赋值给a , 最终a也为5 。b=num2++;
这是把num2++的值赋给b , 因为自增运算符在变量的后面 , 所以先把num2赋值给
b , b应该为8 , 然后num2自增加1变为9 。
那么如果出现这样的情况我们怎么处理呢?
c=num1+++num2;
到底是c=(num1++)+num2;还是c=num1+(++num2);这要根据编译器来决定 , 不同
的编译器可能有不同的结果 。所以我们在以后的编程当中 , 应该尽量避免出现
上面复杂的情况 。
C语言自增自减运算符用法
文章插图
C语言的前置++和后置++ , 称为自增运算符
前置--和后置--称为自减运算符 , 下面以自增运算符的区别来加以介绍 , 自减类似
如果单独写 自增运算符为一个语句 , 二者没有区别
++i; 和 i++; 都是让i+1赋值给i
但是如果把自增运算符写入到另外表达式中二者就有很大区别了
例如
i=5;
j=i++;
执行后i为6 , j为5
i=5;
j=++i;
执行后i为6 , j为6
自增自减运算的优先级是怎样的?
文章插图
1注意运算符的运算对象自增、自减运算符只能作用于变量 , 而不能作用于常量或表达式 。因为自增、自减运算符具有对运算量重新赋值的功能 , 而常量、表达式无存储单元可言 , 当然不能做自增、自减运算 。只要是标准类型的变量 , 不管是整型、实型 , 还是字符型、枚举型都可以作为这两个运算符的运算对象 。如以下四个表达式都是合法的:i+++j++、++i+(++j)、++a+b++、++array[--j];而++6、(i+j)++、‘A’++、++i+++j、(&p)++这五个表达式却是不合法的 。为什么i+++j++合法 , 而++i+++j却不合法?C的编译器对程序编译时 , 从左到右尽可能多地将字符组合成一个运算符或标识符 , 因此i+++j++等效于(i++)+(j++) , 两个“++”作用的对象都是变量 , 这是合法的;而++i+++j等效于++(i++)+j,第1个“++”作用的对象是表达式“i++” , 这是不允许的 。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才自增 。希望对你有帮助