cout输出

asa5880 2009-05-27 11:52:07
int a[] = {1,3,5,7,9};
int *p = a;
cout<<*(++(++p))<<*(p++);

out:73

求详细计算过程!
第一个7好理解,第二个3是为什么?

我跟踪确实push 3

cout<<*(++(++p))<<*(p++);
004016E1 mov ecx,dword ptr [ebp-18h]
004016E4 add ecx,4
004016E7 mov dword ptr [ebp-18h],ecx
004016EA mov edx,dword ptr [ebp-18h]
004016ED mov eax,dword ptr [edx]
004016EF mov dword ptr [ebp-1Ch],eax
004016F2 mov ecx,dword ptr [ebp-1Ch]
004016F5 push ecx
004016F6 mov edx,dword ptr [ebp-18h]
004016F9 add edx,4
004016FC mov dword ptr [ebp-18h],edx
004016FF mov eax,dword ptr [ebp-18h]
00401702 add eax,4
00401705 mov dword ptr [ebp-18h],eax
00401708 mov ecx,dword ptr [ebp-18h]
0040170B mov edx,dword ptr [ecx]
0040170D push edx
0040170E mov ecx,offset std::cout (004777e0)
00401713 call @ILT+255(std::basic_ostream<char,std::char_traits<char> >::operator<<) (00401104)
00401718 mov ecx,eax
0040171A call @ILT+255(std::basic_ostream<char,std::char_traits<char> >::operator<<) (00401104)
...全文
95 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingyin55 2009-05-27
  • 打赏
  • 举报
回复
cout 输出流的执行顺序
http://hi.baidu.com/zwxscu/blog/item/9a86603915aadc23b9998f55.html
loulanhaojie 2009-05-27
  • 打赏
  • 举报
回复
这东西其实不用深究的
K_s_G 2009-05-27
  • 打赏
  • 举报
回复

cout <<*(++(++(++p))) <<*p++; //95
cout <<*(++(++p)) <<*p++; //73
cout <<*(++p) <<*p++; //51
asa5880 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liao05050075 的回复:]
cout < <*(++(++p)) < <*(p++);
先处理后面*(p++),先处理括号,所以p指向了3,然后变成
cout < <*(++(++p)) < <3;
接着,连加两次p,指向了7
[/Quote]

那为什么
cout<<*((++p))<<*(p++);

out:51
liliangbao 2009-05-27
  • 打赏
  • 举报
回复
修改
引用 1 楼 asa5880 的回复:
PS:
我已知道:cout输出是从左至右,计算是从右至左

同意,*(p++)不就是先p++使得p指向3然后输出吗,有括号~
liliangbao 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 asa5880 的回复:]
PS:
我已知道:cout输出是从左至右,计算是从右至左
[/Quote]
同意,*(p++)不就是先p++使得p指向7然后输出吗,有括号~
liao05050075 2009-05-27
  • 打赏
  • 举报
回复
cout < <*(++(++p)) < <*(p++);
先处理后面*(p++),先处理括号,所以p指向了3,然后变成
cout<<*(++(++p))<<3;
接着,连加两次p,指向了7
pengzhixi 2009-05-27
  • 打赏
  • 举报
回复
这样有争议的式子有什么研究的意义呢
asa5880 2009-05-27
  • 打赏
  • 举报
回复
PS:
我已知道:cout输出是从左至右,计算是从右至左
XiaoG602 2009-05-27
  • 打赏
  • 举报
回复
C++在处理相同优先级的运算符的时候(例如:这里的两个<<),是明确不规定先后顺序的,
意思是编译器自定的。同样的,在计算++a+(++a)-(++a)这样的式子,也是不规定先后顺序的,
计算结果在不同环境下是可以不同的,没必要深究。
要记住的是:这样的表达式的先后顺序是不确定的
ex_dijkstra 2009-05-27
  • 打赏
  • 举报
回复
有些公司的笔试题让人蛋疼,告诉他:不符合代码规范,没兴趣!
asa5880 2009-05-27
  • 打赏
  • 举报
回复
怕就怕哪公司面试整出这一类题,难道还得问他:大哥,你们家编译器是啥?

asa5880 2009-05-27
  • 打赏
  • 举报
回复
哎,
用gcc
cout < <*(++(++p)) < <*(p++); //71
用VC6 lc
cout < <*(++(++p)) < <*(p++); //73

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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