您的位置:首页 > 编程语言 > C语言/C++

C++——i++与++i

2015-06-09 22:55 218 查看
本文说说C++的自增(++)

下面是一道题:

#include<iostream>

using namesapce std;

int main()

{

int i=1,j;

printf("%d\n",++i);//(1)

printf("%d\n",i++);//(2)

j=i++;

printf("%d\n",j);//(3)

j=++i;

printf("%d\n",j);//(4)

printf("%d\n",-i++);//(5)

printf("%d\n",-i--);//(6)

i=1;

printf("%d\t%d\n",i++,++i);//(7)

printf("%d\n",i);//(8)

i=1;

cout<<i++<<" "<<++i<<endl;//(9)

cout<<i<<endl;//(10)

return 0;

}

求输出结果。

知识点:

(1)基本的,++i,+在i前,就是先+后用i;i++,+在i后,就是先用i后+,所以,(1),(2)输出2,2。

(2)对于赋值表达式,也是同样道理,所以在(3),j=i++,+在i后:先用i,就是先将i赋值给j,然后在i+1,输出j是3;在(4),j=++i,i在+前:先i+1,然后再用i赋值给j,输出j是5(i在此前已是4)。这里额外说一说,自增运算符(++)和自减运算符(--)只能作用于变量,而不能作用于常量或表达式,例如8++或(x+y)++都是不合法的。

(3)对于“-i++”,首先我们要知道,--和++都是和+,-,*,/,%一样是算术运算符,结合性是自右向左,所以“-i++”应该是-(i++)。那么在(5)前,i=5,所以在-(i++)中,先用i后+,所以是输出-5(因为有负运算符号),然后再++,i就是6了,所以同样道理,在(6)里,先用i,输出-6,再--,i最后是5。

(4)我猜很多人都会错(7)~(10),在许多编译器,包括Visual C++和GCC,在处理流时,都是按自右向左的顺序对各输出项求值。所以,在(7)和(10)里,先处理++i,再处理i++,所以输出的都是2和2。这就是使用自增自减的副作用了。

输出结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: