参数传递或者值引用的问题

小可同学 2011-03-13 11:17:41

int a = 997;
int b = 998;
int c = 999;
int d = a * b * c;
假设情况一
if(d >= 1000 && d <= 10000){ //xxxx处理 }
和情况二
if(a * b * c >= 1000 && a * b * c <= 10000){ //xxxx处理 }

问题:
这里的 d 应该不需要去计算的吧
(据我的理解应该是已经把表达式计算出来的结果赋给它的内存地址了,每次只是取到固定的值,而不是表达式),
而情况二比较1000或者10000的时候应该是每次比较都要计算出表达式a * b * c的结果,我这样理解对吧?

在体验的时候两种方式可能都不会有表面上的影响,但我还是想搞清楚。希望回答的人不要发网址,灌水。
问题比较没有研究性,所以就20分吧。谁答得准有说服力就给他了。
...全文
64 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
子夜__ 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 sammyke 的回复:]
C# code

int a = 997;
int b = 998;
int c = 999;
int d = a * b * c;
假设情况一
if(d >= 1000 && d <= 10000){ //xxxx处理 }
和情况二
if(a * b * c >= 1000 && a * b * c <= 10000){ //xxxx处理 }

……
[/Quote]

自问自答。。
songhongkai123 2011-03-13
  • 打赏
  • 举报
回复
情况一貌似d的值已经计算出,作比较应该是直接取d的值进行比较,不过貌似溢出了吧

第二种比较之前计算表达式的值

这是我的理解
bdmh 2011-03-13
  • 打赏
  • 举报
回复
是的,第一个,直接去d的地址
第二个,每次都要要重新取a,b,c进行乘法计算

其实想搞清楚,你看一下汇编就清楚了
darksmile 2011-03-13
  • 打赏
  • 举报
回复
打开全部优化的情况下
变量a,b,c,d都会被常量替换

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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