c++输出流cout的

1:第一的例子:

#include <iostream>

using namespace std;
int main()
 {
     const int a[] = {10,20,30};
     const int *p = a;
    cout<<"*p:"<<*p<<endl;
     cout<<"*p:"<<*p<<"\t*p++:"<<*p++<<"\t*p"<<*p<<endl; 
     return 0;

 }

/*输出为:
  *p:10
  *p:20  *p++:10   *p:10
*/

从上边的例子中可以看出来cout的计算顺序是从右向左 ,首先解引用*p 得到第一个元素10,然后在第二个输出语句中从右向左,首先解引用得到10,然后计算*p++,关于*p++ 的计算可以参考:比如i = 3; cout<<i++<<endl;同样输出3,因为首先输出i,然后才改变i的值。输出时,首先输出*p 也是10,但是这个式子计算后*p就变成了第二个元素了20,即第一个*p是20,后边的输出为10

 文章来自:http://www.cnblogs.com/newpanderking/archive/2012/03/25/2416465.html

2:第二个例子:

int fun1()

{
 cout<<"num1"<<endl;
 return 1;
}

int fun2()
{
 cout<<"num2"<<endl;
 return 2;
}

int main()
{
 cout<<fun1()<<"  "<<fun2()<<endl;
 return 0;
}

 

输出结果是

num2

num1

 2

为什么呢?为什么不是num11num22呢?这里涉及到cout输出流的执行顺序问题。

cout的输出顺序有如下规律:

计算顺序:自右至左

输出顺序:自左至右

 

cout作为输出流,有一个缓冲区,先从右往左将输出读入缓冲区,在从缓冲区中读出(类似堆栈)

假设a = 1; b = 2; c = 3;
cout
<<a<<b<<c<<endl;
缓冲区:
|3|2|1|<-   (把“<-”看作是指针)
输出:
|3|2|<-     (输出 1)
     
 |3|<-       (输出 2)
     
 |<- (输出 3)
结果就是123.

 

在一开始的例子中,从右往左读入,先执行fun2(),输出num2,并将返回值2保存进缓冲区,再执行fun1(),输出num1,并将返回值1保存进缓冲区。最后开始读取缓冲区中的内容,输出1 2。

文章来自于:http://blog.sina.com.cn/s/blog_62fc96e601012n5z.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值