注册 登录
编程论坛 C++教室

cout输出顺序~~请高手们帮帮忙!

Lo伊。琪 发布于 2010-03-25 09:56, 1290 次点击
楼主
#include <iostream>
using namespace std;
int f(int a)
{
auto int b=0;  //auto可以省略
static int c=3;
b+=1;
c+=1;
return a+b+c;
}

int main()
{
int a=2,i;
/*for(i=0;i <3;i++)
cout < <f(a) < <" ";
cout < <endl;*/
cout < <f(a) < <" " < <f(a) < <" " < <f(a) < <endl;
return 0;
}

此时输出是9 8 7
而把注释的内容替换它下面的输入语句,输出是7 8 9
问题:请问高手,为什么同样调用3次f(a),输出顺序相反呢?
我用的是VC6.0
不胜感激
问题补充:
cout自右向左输出不对,如果定义int a,b,c;
a=1,b=2,c=3;
cout<<a<<b<<c<<endl;
输出123而不是321



#include<iostream.h>
//add()函数的定义,其有返回值
double add(double x,double y)
{
    double z;
    z=x+y;
    cout<<x<<"+"<<y<<"="<<z<<endl;
    return(z);
}

void main()
{
    double a=0.5,b=1.0,p;
   
    //以不同参数形式调用函数add()
    cout<<"add(a,b)="<<add(a,b)<<endl;
}
此时输出的结果:0.5+1=1.5
                add(a,b)=1.5
问题:为什么不是先输出cout<<"add(a,b)="<<add(a,b)<<endl;语句中的字符串常量"add(a,b)="再调用add()函数呢?请高手们给小弟指点指点,不胜感激啊!

  

 
8 回复
#2
秀痘魔导士2010-03-25 10:07
cout是从右到左运算完再输出的吧,输出顺序是从左到右,参数入栈顺序就不一样了

1.cout参数入栈的顺序是从右到左...例如cin < <a < <b < <c;在栈中的位置如下:c-b-a.. <-(栈指针);但是输出是从栈指针的位置开始的,意思即这时的输出顺序仍然是abc....否则有违常理...
2.如果参数是有待计算的函数,例如...cin < <f(a) < <f(b) < <f(c) < <endl;这时我认为cin会先把函数放进栈中然后再计算..意思是这时栈顺序是f(c)-f(b)-f(a).. <-..但是这时候计算的顺序却是f(c)最先,f(b)次之,f(a)最后...
下面的程序验证了我说的:

C/C++ code

#include <iostream>
using namespace std;

int fa()
{
    cout<<"fa()"<<endl;
    return 1;
}

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

int fc()
{
    cout<<"fc()"<<endl;
    return 3;
}
int main()
{
   
    cout<<fa()<<fb()<<fc()<<endl;
    return 0;
}
/*
输出:fc()
     fb()
     fa()
     123
*/



[ 本帖最后由 秀痘魔导士 于 2010-3-25 10:11 编辑 ]
#3
Lo伊。琪2010-03-25 22:59
回复 2楼 秀痘魔导士
非常感谢您的无私解答!小弟愚昧,还有点疑问哦,要是像您所说的,那我第一个程序的输出结果怎么会是:9 8 7 呢,可以再帮帮忙么。。
#4
风行2010-03-26 04:52
和重载函数的赋值是一样的,入栈从右到左,出栈从左到右。
#5
秀痘魔导士2010-03-26 09:14
最右边的先入栈,计算得到7,然后中间的,8,最后左边的9,然后从左到右出栈,9,8,7
#6
vincentfon2010-03-26 10:18
以下是引用秀痘魔导士在2010-3-25 10:07:44的发言:

cout是从右到左运算完再输出的吧,输出顺序是从左到右,参数入栈顺序就不一样了

1.cout参数入栈的顺序是从右到左...例如cin < <a < <b < <c;在栈中的位置如下:c-b-a.. <-(栈指针);但是输出是从栈指针的位置开始的, ...
谢谢,学到了。
#7
Lo伊。琪2010-03-26 12:51
回复 5楼 秀痘魔导士
非常感谢您抽空帮小弟解答疑惑,我明白了。。。呵呵,谢谢您!
#8
Lo伊。琪2010-03-26 12:52
回复 4楼 风行
呵呵。。小弟懂了,谢谢您哦!
#9
君临◆XQ2010-03-26 23:49
顶2楼
1