- 论坛徽章:
- 2
|
在学习c/c++中我们经常看到字符连在一起时的使用,看起来确实比较混淆,这就要看大家怎样去分析了。下面我就举两个例子,大家一起来来看看~~
例一:首先说明一下下面的代码是合法的,编译通过的- #include<iostream>
- using namespace std;
- int main()
- {
- int x=10;
- while (x-->0)
- {
- cout<<x<<endl;
- }
- }
复制代码 结果是9 8 7 6 5 4 3 2 1 0,毫无疑问结果是没问题的。没错,-->只是两个操作符恰好遇在了一起,他们是自减运算符--和大于比较运算符>:是一个合法的操作符。这里好多学习c/c++的你们都不知道这个操作符。有人称它为goes to操作符,x-->0表示x向0趋近—当然这只是我个人的定义,觉得这两个字符连在一起还是比较特殊的。
与前面相类似的有- #include<iostream>
- using namespace std;
- int main()
- {
- int x = 10;
- while (x -- \
- \
- \
- \
- > 0)
- {
- cout<<x<<endl;
- }
- }
复制代码 结果是一样的哦
例二:我相信这是大家在学习过程中经常看到的
解决这类问题需要懂汇编,另外与编译器也有关系。
这里只是我的理解,也不一定权威哦……- #include<iostream>
- using namespace std;
- int main()
- {
- int i = 1;
- int j = (i++)+(i++)+(i++);
- i = 1;
- int k = (++i)+(++i)+(++i);
- cout<<j<<"-"<<k<<endl;
- }
复制代码 为什么这里j是3,而k是10呢?
j = 3 是因为i++是先运算之后然后才进行++,因此它的结果是3
而k = 10 是因为++i是先++,然后才运算,但是并不是等所有的加完之后才运算,并不是9,而是利用贪吃法先进行 k = ((++i) + (++i)) + (++i) 也就是 k = (3 + 3) + 4 = 10
计算这类问题是一定要弄清楚实质
++i为前置自增,i++为后置自增,前者i先加1再参加其他运算,后者i先参加其他运算再加1,如果单独一条语句i++;或++i;两者运行效果相同,比如for(int i=0; i<10; i++)和for(int i=0; i<10; ++i)实现的功能一样,比如
int i = 0, j;
j = i++;运行结果为i为1,但是j为0
int i = 0, j;
j = ++i;
运行结果为i为1,但是j为1 |
|