(C++)浅谈自增运算

来源:互联网 发布:淘宝电脑直通车怎么找 编辑:程序博客网 时间:2024/06/05 18:35

一、介绍

说起自增运算(我以前称它为自加运算,其实也差不多~~)大家一定知道就是形如“i++”形式的表达式,相信编程书上也是这么介绍的。我之前学习C#,唯一使用i++的机会就是循环的时候,自变量+1。其实过了很久我才只知道"++"不仅可以放在变量的前面而且也可以放在变量的后面现在我就开始揭开它的神秘面纱!

二、定义

首先自增运算符有前置和后置之分。前置“++变量”:它就相当于变量加上一个1再赋值。int i=1;int k=1;k=++i;结果输出的i为2,k也为2。后置“变量++”:它就相当于先赋值给左边的变量再进行加1操作int i=1;int k=1;k=i++;结果输出的i为2,二k也为1。是不是很懂了呢?那就看看下面的代码吧!

三、问题分析

1.后置自增运算符:

#include "stdafx.h"#include<string.h> //字符串操作函数库头文件#include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int i = 1; int k; k = i++ + i++; printf_s("k=%d\ni=%d\n", k,i); system("pause"); return 0; }

我之前一直是以为结果会是k为5。不过结果却是k却为2!为什么呢?应为我一直以为右边的两个表达式“i++”(我之前认为i++既然等价于“i=i+1“)是从左到右依次进行的所以第一个“i++”返回的结果是2(i的值更新为2了),第二个运算的结果是3,,那么2+3=5了!:(当然不是这样的啦~~)原来每一个“i++”的优先级都是一样的,也就是说这两个“i++”都是同时进行的,可就是可以认为k=1+1=2,而根据后置自增运算的定义是先赋值后自加1,所以i就自增两次(因为有两个”++“运算符嘛)i=3;

2.前置自增运算符:

#include "stdafx.h"#include<string.h> //字符串操作函数库头文件#include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int i = 1; int k; k = ++i + ++i; printf_s("k=%d\ni=%d\n", k,i); system("pause"); return 0; }

与后置自增不同的是,前置是先自增后赋值。首先第一个”++i“等价于”i=i+1“结果为2,而第二个”++i“也等价于”i=i(但此时这个i=2了)+1“结果为3。但是可不能以为k=2+3=5就完了。不是,注意第一个”++1“等价于”i=i+1“的左值也是i,后面的”++i“的左值也是i(但这个i已经被赋值为3了,所以第一个”++i“的左值i可以理解为被第二个”++i“的左值i=3给”赋值“了,综上k=3+3=6;而i也就因此为3了!四、总结:遇到后置自增运算,要记住”先赋值,后自增“;如果为前置,则记住”先自增,后赋值“。对于后置自增运算很好理解,对于前置就有点儿复杂了。不过也可以这么认为,虽然前置自增也是同时进行的,到可以根据需要认为是从右到左进行的计算,也就是说右边的”++i“所得的结果可以作为左边的”++i“所自增的变量。另外,对于前置自增运算也需要注意变量是否被更新的问题。

参考资料

0 0