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

C语言 码拜 6年前 (2015-05-11) 299次浏览 0个评论
 

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

我可以发表一下自己的看法吗!?c中的答案应该是3  而php中应该是4  编译器的默认不同!我也是新手!回答不好的地方请谅解
你这最后输出问的是j的值吧
引用 1 楼 cfy520gh 的回复:

我可以发表一下自己的看法吗!?c中的答案应该是3  而php中应该是4  编译器的默认不同!我也是新手!回答不好的地方请谅解

c 答案是 6, php是5

这是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;

5分
引用 3 楼 zoen210 的回复:
Quote: 引用 1 楼 cfy520gh 的回复:

我可以发表一下自己的看法吗!?c中的答案应该是3  而php中应该是4  编译器的默认不同!我也是新手!回答不好的地方请谅解

c 答案是 6, php是5

C中这个表达式是错误的 
具体可以参加置顶帖 

5分
考察表达式的值

	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下的汇编,其它编译器,效果很可能不一样

5分
http://bbs.csdn.net/topics/370153775
为什么要和php的一样?php一个脚本语言,能和C++比?
25分
Undefined behavior
实在没有讨论的必要
引用 9 楼 mymtom 的回复:

Undefined behavior
实在没有讨论的必要

闲来无事可以拿来练练嘴皮子。

引用 11 楼 zhao4zhong1 的回复:
Quote: 引用 9 楼 mymtom 的回复:

Undefined behavior
实在没有讨论的必要

闲来无事可以拿来练练嘴皮子。

表情贴错了。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C 的(++j)+(++j) 为什么和php的结果不一样,j=1
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!