设为首页 加入收藏

TOP

C++中cout语句背后的堆栈知识(一)
2014-03-10 12:54:29 来源: 作者: 【 】 浏览:238
Tags:cout 语句 背后 堆栈 知识

  C++中的cout是最常见的,假如cout后面有多个输出的话,他们的输出顺序是什么呢 决定他们输出顺序背后的原理是什么呢 先看下面的代码(1):

  1 #include

  2 using namespace std;

  3 int abs(int a);

  4 int main()

  5 { int a=-5;

  6 cout<

  7 }

  8 int abs(int a)

  9 { cout<<"int a"<

  10 return (a>=0 a:-a);

  11 }

  大家看一眼第6行的输出结果:很多人认为是-5

  int a

  5

  可实际的结果是这样吗 看下图

  图(1)

  是不是与我们期望的不一样

  最后的输出结果与cout背后的汇编中堆栈有很大联系,我们知道汇编中堆栈是“后入先出”的存储区,执行第6行语句,从右向左依次把要输出的值压入堆栈,最后从上到下依次输出,第6行的汇编伪代码如下(以下代码不是严格意义上的汇编代码,为容易理解而写成):

  push endl;//把换行符压入

  push abs(a);//压入函数返回值,函数返回值压入堆栈需要两步:首先先执行cout<<"int a"<

  push endl;

  push a;输出a的值

  到此所有的值都压入堆栈,并且此过程中执行其他语句(第9行)的输出结果在屏幕上已经显示出来,然后堆栈中的值依次出栈,在屏幕上先显示-5,再显示5;

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.5.4 使用ADT包 下一篇C++对象占用内存大小的思考

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)
·TCP和UDP在socket编 (2025-12-26 02:20:32)
·有没有适合新手练习 (2025-12-26 01:48:47)
·用清华镜像网怎么下 (2025-12-26 01:48:44)