C 的(++j)+(++j) 为什么和php的结果不一样,j=1

又要起名字啊 2015-05-05 02:41:11
C 的(++j)+(++j) 为什么和php的结果不一样,j=1
...全文
149 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-05-06
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
[quote=引用 9 楼 mymtom 的回复:] Undefined behavior 实在没有讨论的必要
闲来无事可以拿来练练嘴皮子。[/quote] 表情贴错了。
赵4老师 2015-05-06
  • 打赏
  • 举报
回复
引用 9 楼 mymtom 的回复:
Undefined behavior 实在没有讨论的必要
闲来无事可以拿来练练嘴皮子。
mymtom 2015-05-05
  • 打赏
  • 举报
回复
Undefined behavior 实在没有讨论的必要
Minikinfish 2015-05-05
  • 打赏
  • 举报
回复
为什么要和php的一样?php一个脚本语言,能和C++比?
赵4老师 2015-05-05
  • 打赏
  • 举报
回复
苏叔叔 2015-05-05
  • 打赏
  • 举报
回复
考察表达式的值

	int i;
	int j = 1;
 mov         dword ptr [ebp-14h],1  
	i = (++j) + (++j);
 mov         eax,dword ptr [ebp-14h]  
 add         eax,1  
 mov         dword ptr [ebp-14h],eax  
 mov         ecx,dword ptr [ebp-14h]  
 add         ecx,1  
 mov         dword ptr [ebp-14h],ecx  
 mov         edx,dword ptr [ebp-14h]  
 add         edx,dword ptr [ebp-14h]  
 mov         dword ptr [ebp-8],edx  
这之后显然 i=6; 这是vs下的汇编,其它编译器,效果很可能不一样
lin5161678 2015-05-05
  • 打赏
  • 举报
回复
引用 3 楼 zoen210 的回复:
[quote=引用 1 楼 cfy520gh 的回复:] 我可以发表一下自己的看法吗!?c中的答案应该是3 而php中应该是4 编译器的默认不同!我也是新手!回答不好的地方请谅解
c 答案是 6, php是5[/quote]C中这个表达式是错误的 具体可以参加置顶帖
苏叔叔 2015-05-05
  • 打赏
  • 举报
回复
这是vs的debug模式下的汇编代码:

	int j = 1;
 mov         dword ptr [ebp-8],1  
	(++j) + (++j);
 mov         eax,dword ptr [ebp-8]  
 add         eax,1  
 mov         dword ptr [ebp-8],eax  
 mov         ecx,dword ptr [ebp-8]  
 add         ecx,1  
 mov         dword ptr [ebp-8],ecx  
显然,之后j=3;
又要起名字啊 2015-05-05
  • 打赏
  • 举报
回复
引用 1 楼 cfy520gh 的回复:
我可以发表一下自己的看法吗!?c中的答案应该是3 而php中应该是4 编译器的默认不同!我也是新手!回答不好的地方请谅解
c 答案是 6, php是5
cfy520gh 2015-05-05
  • 打赏
  • 举报
回复
你这最后输出问的是j的值吧
cfy520gh 2015-05-05
  • 打赏
  • 举报
回复
我可以发表一下自己的看法吗!?c中的答案应该是3 而php中应该是4 编译器的默认不同!我也是新手!回答不好的地方请谅解

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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