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。这就是使用自增自减的副作用了。
输出结果:
下面是一道题:
#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。这就是使用自增自减的副作用了。
输出结果:
相关文章推荐
- 把学习当成项目来执行之初试牛刀--Modern C++ Design学习
- C++ 中的类型转换函数
- 【Text Justification】cpp
- C++中如何避免内存泄露
- 对C++中顺序容器的插入迭代器的认识
- c语言中scanf等函数关于输入流缓冲区
- C++ bool值
- C语言基础练习:在Xcode中练习的for循环语句
- C++继承时派生类与基类有同名函数时如何分别引用
- zerglurker的C语言教程004——指针初步讲解
- Java基础 Java与C++的几点细节不同
- ###《More Effective C++》- 操作符
- C++归并算法
- 某整形数组中除了两个单身整数外, 其余的整数都是成对出现的, 利用C/C++代码求出这两个单身整数。 要求: 时间复杂度o(n), 空间复杂度o(1)------某公司招聘试题
- C++中 引入虚基类的作用
- C++内存对齐
- 【学习笔记】【C语言】选择结构-if
- C++类 (03)
- 实现Android Studio JNI开发C/C++使用__android_log_print输出Log
- C++ Primer 学习笔记_40_STL实践与分析(14)--概要、先来看看算法【上】