首先,我们先来了解一下在C++中什么是表达式什么是语句
表达式:表示运算的式子
1.可以是一个变量、常量 如:a,b,5
2.也可以是一个用运算符将表达式连起来的式子 如:3+5、a+b
语句:表达完整的命令
eg: int a;//声明语句
a = 5; //赋值语句
a+b; //表达式语句
; ; ; //空语句
其实语句就可以简单理解为表达式后面加分号“;”
i++和++i的作用
相信大家都听过这么一句话,i++和++i本质上没有什么区别,都是使变量i在数值上加1。
它的效果就跟 i=i+i; 语句一样。
1.for语句中作自增运算符时
for(int i = 0; i < 5; i++)
{
if(i)
cout << " " ;
cout << i ;
}
for(int i = 0; i < 5; ++i)
{
if(i)
cout << " " ;
cout << i ;
}
这里呢,i++跟++i是没有什么区别的。
但是我想,大家应该还听过一句话,它们还是有一点区别的
嗯,对的,今天我主要就是想谈谈它们这一细微的区别
2. 用于赋值表达式(赋值语句)时
int a, b,i = 0;
a = i++;
b = ++i;
cout << a << " " << b << " " << i << endl;
结果: 0 2 2
为什么会是这种结果呢?
因为在在自增运算符作表达式(语句)时,前自增++i和后自增i++分别代表自增前和自增后i的值。
在该例子中,a获得的就是i++即自增前的值0,而b获得的就是自增后的值2,不过为什么是2呢?
这是因为在a = i++;的式子中,i已经给自己加1了,只不过它赋给a的值是它自增前的,所以在执行到b=++i时,i在数值上已经是1了,于是在执行b = ++i时,b获得i再一次自增后的数值,即1+1=2。
眼尖的朋友,应该已经看到了我标绿色的那段话了,为什么我要把这段话标绿呢?
这是因为在前两天,有个朋友问了我一个问题当程序依次执行i = i++;a = i;最后a和i的结果会是什么?
int i = 0, a;
i = i++;
a = i;
cout << i << " " << a << endl;
结果:0 0;
到这里,小伙伴们可能会有点疑惑,为什么a的值是0呢?
这也是我这篇博客讨论自增的重点
这涉及到了运算优先级的问题
首先,你要知道,自增运算符的优先级要高于乘除运算符,而乘除运算符优先级高于赋值运算符。
而计算在执行语句时,会优先进行优先级高的运算
也就是说,在执行i = i++时,i已经被加1了,但是它是后自增作表达式,故它又将自增前的值0赋给了自己,覆盖了加1后值,所以执行完i = i++后,i的值是0.
如果你觉得本篇文章对你有帮助的话,留下你的赞让我知道你来过可好?
谢谢!