cout,printf输出问题
By zieckey (http://blog.chinaunix.net/u/16292/index.html)
话说这是08年11月份IBM招聘的笔试题,感觉蛮有意思的。
好了,废话少说见程序:
#include
using namespace std;
int fun( )
{
cout << "f" ;
return 1;
}
int main()
{
int i = 1;
cout << i++ << i++ << i++ << endl;
cout << "m" << fun() << fun() << fun() << endl;
return 1;
}
输出:
321
fffm111
如果只针对题来说的话,实际是这样的
cout<<"m"<对于<<其实是从右往左处理的。于是碰到fun()必然先输出f,然后返回1,于是就变成了
cout<<"m"<继续往左走,直到 cout<<"m"<<1<<1<<1 ;的时候已经输出了fff ,之后就是按顺序输出了m111, 所以看到的结果就是 fffm111
题目稍微更改下,看看输出就更好理解了:
#include
#include
using namespace std;
int fun( int i )
{
cout < return i;
}
int main()
{
int i = 1;
cout << i++ << i++ << i++ << endl;
cout << "m" << fun(1) << fun(2) << fun(3) << endl;
printf("m%d%d%d\n", fun(1),fun(2),fun(3));
return 1;
}
输出:
321
3f2f1fm123
3f2f1fm123
说明:cout、printf等都是从右向左处理的,先计算,然后再一次性输出。
阅读(2803) | 评论(0) | 转发(0) |