再谈C/C++中printf与cout的求值顺序和输出,显示顺序问题

温暖阳光236 2010-05-27 04:34:29
经过了大家的谈论与我的思考
现在证明一下的这句说话是错的
“printf函数是从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所有我们看见的结果是,从右边开始处理的”

先从C出发:
printf("%d, %d\n", a, b);
应该先运算a,再运算b.
b和a在运算的同时会各自入栈,所以b先入栈,在栈底,a跟着入栈,在栈顶
而输出和显示时同一样的,先输出的先显示
根据栈的后进先出原理
a在栈顶,a先输出,a先显示,b在栈底,b后输出,后显示

C++角度:
cout << "a=" << a << '\t' << "b=" << b << endl;
系统在运行cout的一系列“<<”操作符,即插入运算符时,先将各表达式的值
从右往左依次存储到缓冲区——————————这相当于printf的入栈;
当刷新缓冲区时,则按从左到右顺序输出————————这相当于printf的出栈
因为插入运算符的结合性为右结合

C/C++都一致的,即都是先运算b,b入栈(存储进缓冲区),运算a,a入栈(存储进缓冲区)
输出(显示)时,a先出栈(a缓冲区被刷新),b出栈(b缓冲区被刷新)
完毕!

以上是我对C/C++关于printf和cout的运算,输出(显示)的一些理解,不知道正确否
...全文
695 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧