| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1348 人关注过本帖
标题:m=++j + ++j + ++j;
只看楼主 加入收藏
B_Y
Rank: 1
等 级:新手上路
帖 子:27
专家分:4
注 册:2010-3-8
结帖率:42.86%
收藏
已结贴  问题点数:10 回复次数:8 
m=++j + ++j + ++j;
j=3;
m=++j + ++j + ++j;
printf ("%d",m);
结果是16?为什么
2010-08-11 22:16
毕业旅行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:130
专家分:280
注 册:2010-7-7
收藏
得分:2 
这个和编译器有关,我刚用VC也是16,
算法应该是先算++j+++j等于j先自增为5,相加得10然后计算10+++j
为10+6=16
别的编译器结果可能会不一样的
2010-08-11 22:34
B_Y
Rank: 1
等 级:新手上路
帖 子:27
专家分:4
注 册:2010-3-8
收藏
得分:0 
回复 2楼 毕业旅行
gcc也是16...
应该不是编译器的问题
2010-08-11 22:54
毕业旅行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:130
专家分:280
注 册:2010-7-7
收藏
得分:0 
因为我记得老的教材有说18的编译结果的,手头没TC不晓得TC的结果,16的话应该就是我说的那种去算的
我觉得这种问题没必要去纠结啊,纯粹考试里会有,自己写一般不会去弄这么复杂的。
2010-08-11 23:01
B_Y
Rank: 1
等 级:新手上路
帖 子:27
专家分:4
注 册:2010-3-8
收藏
得分:0 
回复 4楼 毕业旅行
TC下是18没错...
2010-08-12 16:26
lampeter123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:2 
m=++j + ++j + ++j;//标准C是不可以这样写的

问这个问题,证明很多人都在看谭浩强爷爷的书

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2010-08-12 17:16
lampeter123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:0 
谭浩强爷爷的<<C语言>>一书中:

【例3.17】
main(){
  int i=5,j=5,p,q;
  p=(i++)+(i++)+(i++);
  q=(++j)+(++j)+(++j);
  printf("%d,%d,%d,%d",p,q,i,j);
}

  这个程序中,对P=(i++)+(i++)+(i++)应理解为三个i相加,故P值为15。然后i再自增1三次相当于加3故i的最后值为8。而对于q 的值则不然,q=(++j)+(++j)+(++j)应理解为q先自增1,再参与运算,由于q自增1三次后值为8,三个8相加的和为24,j的最后值仍为8。

//其实讨论这个问题是没有任何意义的, 不同编译器有不同的结果,最好不要写这样的句子

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2010-08-12 17:27
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:2 
以下是引用lampeter123在2010-8-12 17:27:37的发言:

谭浩强爷爷的<>一书中:

【例3.17】
main(){
  int i=5,j=5,p,q;
  p=(i++)+(i++)+(i++);
  q=(++j)+(++j)+(++j);
  printf("%d,%d,%d,%d",p,q,i,j);
}

  这个程序中,对P=(i++)+(i++)+(i++)应理解为三个i相加,故P值为15。然后i再自增1三次相当于加3故i的最后值为8。而对于q 的值则不然,q=(++j)+(++j)+(++j)应理解为q先自增1,再参与运算,由于q自增1三次后值为8,三个8相加的和为24,j的最后值仍为8。

//其实讨论这个问题是没有任何意义的, 不同编译器有不同的结果,最好不要写这样的句子
    赞同楼上的观点
    对于C的过分要求我认为是不必的,现在很多学校的考试重点仍然是运算符优先级、printf的参数表这些东西,我的天,这些东西在实际中是非常不好用,或者说是可以不必理会的。对于运算符优先级,多用几个括号不就结了。我认为需要理解的东西是这些“过时”东西背后体现的本质(指针,内存),而不是老旧了的本身。

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-12 18:46
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:2 
对于不同的编译器结果可能是不同的,建议LZ如果不熟悉优先级的情况下加括号表示,m=(++j) + (++j)+(++j);即使熟悉优先级的,建议还是养成加括号的习惯,以便别人阅读你的代码,提高程序的可读性。
以上纯属个人建议...
2010-08-12 21:11
快速回复:m=++j + ++j + ++j;
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028115 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved