C/C++中cout和printf的运行机制
来源:互联网 发布:golang go的用法 编辑:程序博客网 时间:2024/05/20 11:31
在进行分析之前先看一个例子:
例子1:
#include <iostream>#include <stdio.h>using namespace std;static int x=3;int foo1(){ x+=2; cout<<"the first value of x is:"<<x<<endl; return x;}int foo2(){ x+=2; cout<<"the second value of x is:"<<x<<endl; return x;} int main(){ int i = 0; cout<<"cout the value: "<<"i="<<i<<' '<<"i++="<<i++<<' '<<"i--="<<i--<<endl; printf("printf the value: i= %d, i++= %d, i--= %d\n",i,i++,i--); cout<<"the case 1: "<<endl; cout<<"the value of foo1: "<<foo1()<<endl; cout<<"the value of foo2: "<<foo2()<<endl; return 0;}例子2:
#include <iostream>#include <stdio.h>using namespace std;static int x=3;int foo1(){ x+=2; cout<<"the first value of x is:"<<x<<endl; return x;}int foo2(){ x+=2; cout<<"the second value of x is:"<<x<<endl; return x;} int main(){ int i = 0; cout<<"cout the value: "<<"i="<<i<<' '<<"i++="<<i++<<' '<<"i--="<<i--<<endl; printf("printf the value: i= %d, i++= %d, i--= %d\n",i,i++,i--); cout<<"the case 2:"<<endl; cout<<"\t the value of foo1: "<<foo1()<<"\t"<<"the value of foo2: "<<foo2()<<endl; return 0;}
观察例子1和例子2,唯一的不同就是cout输出foo1和foo2的值;这两个例子体现了cout和printf输出的运行机制,首先先看下这两个例子的输出:
//例子1输出:/*cout the value: i=0 i++=-1 i--=0printf the value: i= 0, i++= -1, i--= 0the case 1:the first value of x is:5the value of foo1: 5the second value of x is:7the value of foo2: 7*///例子2输出:/*cout the value: i=0 i++=-1 i--=0printf the value: i= 0, i++= -1, i--= 0the case 2:the second value of x is: 5the first value of x is: 7the value of foo1: 7the value of foo2: 5*//*从两个例子的输出可以看出foo1和foo2输出不同,下面将对cout和printf的输出机制进行分析,进行解释printf和cout的输出问题。*/
在c/c++中,cout和printf的机制是先从右往左读入缓冲区,然后再从左往右输出;
#include <iostream>using namespace std;int main(){ int a = 7; int b = 6; int c =5; cout<<"a= "<<a<<' '<<"b= "<<b<<' '<<"c= "<<c<<endl; return 0;}//cout和printf是先从右往左读入缓冲区,然后再从左往右输出;/*buffer:| 5 | 6 | 7 | 即依次把c=5,b=6,a=7压入缓冲区output:| 7 | 6 | 5 | 即依次输出a=7,b=6,c=5;*/
有了对cout和printf输出机制的了解,我们就可以分析上面例子的输出的结果:
//注:x是static变量,初始值x=3; int i = 0; cout<<"cout the value: "<<"i="<<i<<' '<<"i++="<<i++<<' '<<"i--="<<i--<<endl;/*上面输出cout the value: i=0 i++=-1 i--=0;因为从右到左依次压入缓冲区,最右边的i=0压入缓冲区,再进行i--,则i=-1;继续把i=-1压入缓冲区,再进行i++,此时i=0;最后把i=0压入缓冲区;则此时缓冲区的值为buffer:| 0 | -1 | 0 |;输出时从左到右依次是0,-1,0;*/ printf("printf the value: i= %d, i++= %d, i--= %d\n",i,i++,i--);/*上面输出printf the value: i=0 i++=-1 i--=0;因为从右到左依次压入缓冲区,最右边的i=0压入缓冲区,再进行i--,则i=-1;继续把i=-1压入缓冲区,再进行i++,此时i=0;最后把i=0压入缓冲区;则此时缓冲区的值为buffer:| 0 | -1 | 0 |;输出时从左到右依次输出i,i++,i--是0,-1,0;因此cout和printf的运行机制是一样的*/ cout<<"the case 1: "<<endl; cout<<"the value of foo1: "<<foo1()<<endl;/*上面语句cout<<"the value of foo1: "<<foo1()<<endl;首先调用foo1()函数,在foo1()函数中,先进行x+=2,即x=5;然后执行cout<<"the first value of x is: "<<endl;即在屏幕打印the first value of x is:5;继而执行return x;返回值为5,所以cout<<"the value of foo1: "<<foo1()输出the value of foo1: 5;*/ cout<<"the value of foo2: "<<foo2()<<endl;/*上面语句cout<<"the value of foo2: "<<foo2()<<endl;首先调用foo2()函数,在foo2()函数中,先进行x+=2,即x=7;然后执行cout<<"the second value of x is: "<<endl;即在屏幕打印the second value of x is:7;继而执行return x;返回值为7,所以cout<<"the value of foo2: "<<foo2()输出the value of foo2: 7;*///下面分析case 2cout<<"the case 2:"<<endl; cout<<"\t the value of foo1: "<<foo1()<<"\t"<<"the value of foo2: "<<foo2()<<endl;/* 上面语句首先调用foo2()函数,再调用foo1()函数;在foo2()函数中,先进行x+=2,即x=5;然后执行cout<<"the second value of x is: "<<endl;即在屏幕打印the second value of x is:5;继而执行return x;返回值为5,cout时把foo2()函数的返回值5压入缓冲区; 进而调用foo1()函数,在foo1()函数中,先进行x+=2,即x=7;然后执行cout<<"the first value of x is: "<<endl;即在屏幕打印the first value of x is:7;继而执行return x;返回值为7,cout时把foo1()函数的返回值7压入缓冲区;此时缓冲区的值buffer:| 5 | 7 |;则从左到右依次输出foo1,foo2的值为7,5*/
最后给出一个例子:
#include <iostream>using namespace std;int foo(){ static int x =3; x+=2; cout<<"the value of x is:"<<x<<endl; return x;} int main(){ cout<<"the value of foo: "<<foo()<<"\t"<<foo()<<endl; return 0;}/*output:the value of x is:5the value of x is:7the value of foo: 75*/
0 0
- C/C++中cout和printf的运行机制
- C语言中Printf()函数的运行机制
- C/C++中printf和C++中cout的输出格式
- C/C++中printf和C++中cout的输出格式
- C/C++中printf和C++中cout的输出格式
- C/C++中printf和C++中cout的输出格式
- C/C++中printf和C++中cout的输出格式
- C/C++中printf和C++中cout的输出格式
- C/C++中printf、cout输出顺序
- eclipse C/C+ CDT中scanf、cin、 printf、cout不能debug输入输出的问题
- C++,cout和std::cout的区别
- C++中cout的运行机制
- 1118关于C语言中内存计算,和一些运算符以及scanf和printf运行机制
- C/C++中printf/cout 计算顺序与缓冲区问题
- c中的printf和c++中的cout有什么区别
- 【C++】cin、cout的效率比scanf和printf低的解决方法
- 讨论C++的cin/cout与C的scanf/printf
- C中printf 和write的区别
- Android之高仿易信“侧滑菜单(左侧)”
- SupremeWord进度41%
- SVN源码服务器搭建-详细教程
- (转载)RedHat Enterprise Linux 5 安装GCC过程
- ls命令的实现和原理 [linux演习]
- C/C++中cout和printf的运行机制
- 腾讯视频解析接口
- jse-集合框架
- 题目1433:FatMouse 题目21
- iOS开发-Xcode6应用程序国际化本地化
- 给即将走上社会大学生朋友的忠言
- 【推荐系统】Netflix 推荐系统:第二部分
- Activity 的四种启动方式
- 循环队列操作