今天开始搞搞C++。
今天看了一下VC里的汇编代码,才有一点点搞懂了printf 和 cout 的工作方式(我用的是VC++6.0)。刚学汇编,有什么不对的地方请更正啊。
(1)printf
int
i
=
5
;
printf(
"
%d,%d,%d\n
"
,i,i
++
,i);
printf(
"
%d
"
,i);
结果是5,5,5
6
VC是先把要输出的3个变量push进栈里面,然后再做i++ 这一操作的,再调用printf函数。所以我们看到第一个printf输出的是3个未改变的i,到了第二个printf 时i 的值是5,所以push进栈的i=5,输出的是5。
(2)cout
int
i
=
5
;
cout
<<
i
<<
i
++<<
i;
结果是655
不太懂流,不过根据汇编代码来看,cout是从后往前操作的,push i<-- i++ <--push i <-- push i;
所以最后一个i=5,第二个i=5,i++后第一个i=6. 如果后面有<<endl;的话就是先做endl操作。
那cout<<i<<++i<<i 的结果呢?不难知道是 665.
可以看到,printf 和 cout 的操作顺序不同。
今天看了一下VC里的汇编代码,才有一点点搞懂了printf 和 cout 的工作方式(我用的是VC++6.0)。刚学汇编,有什么不对的地方请更正啊。
(1)printf
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
结果是5,5,5
6
VC是先把要输出的3个变量push进栈里面,然后再做i++ 这一操作的,再调用printf函数。所以我们看到第一个printf输出的是3个未改变的i,到了第二个printf 时i 的值是5,所以push进栈的i=5,输出的是5。
(2)cout
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cbef093dcc044b2793832001e2365e43.gif)
不太懂流,不过根据汇编代码来看,cout是从后往前操作的,push i<-- i++ <--push i <-- push i;
所以最后一个i=5,第二个i=5,i++后第一个i=6. 如果后面有<<endl;的话就是先做endl操作。
那cout<<i<<++i<<i 的结果呢?不难知道是 665.
可以看到,printf 和 cout 的操作顺序不同。