首页 电脑 电脑学堂 查看内容

fun(++i, i, i++, i++)问题

2015-1-17 23:37 2017 0

摘要: 这是几个月前一个学弟问我的问题,应该是c2级上的一个选择题,还是蛮有意思的,而且网上是没有这个题的答案的,题目是这样的[java] view plaincopypublic cla...
关键词: nbsp 内存 参数 于是 当时 所以 最后 结果 三个 阶段

这是几个月前一个学弟问我的问题,应该是c2级上的一个选择题,还是蛮有意思的,而且网上是没有这个题的答案的,题目是这样的[java] view plaincopypublic class Demo{    public static void fun(a,b,c,d){      System.out.println(a);      System.out.println(b);      System.out.println(c);      System.out.println(d);    }    public static void main(String[] args){     int i=1;     fun(++1,i,i++,i++);    }  }  输出结果是:4,4,2,1 肯定想不到吧。计算步骤如下:[html] view plaincopy首先是明确2个问题  1.函数的执行顺序为从右到左执行  2.参数计算结果后并不会马上返回计算结果,而是等所有值都计算以后再返回结果。    如第一题:  fun(++i, i, i++, i++)  //-------------------------------------------计算阶段---------------------------------------------------    1).i++; (当时i=1) 由于是i++ 所以会将该值保存到内存中 最后会返回该内存中的值 第四个参数d=1  2).i++; (当时i=2) 由于是i++ 所以会将该值保存到内存中 最后会返回该内存中的值 第三个参数c=2  3).i;   (当时i=3) 由于是i 所以不会记录到内存中 最后会直接返回i值  4).++i; (当时i=4) 由于是++i 程序会在i的基础上+1 并返回i值 所以不会记录到内存中 最后会直接返回i值    //-------------------------------------------返回计算结果阶段---------------------------------------------------    5).返回第四个参数  返回1)中内存地址中的值 d=1      6).返回第三个参数  返回2)中内存地址中的值 c=2      7).返回第二个参数  返回i值 b=4  8).返回第一个参数  返回i值 a=4  不过他还有一道衍生题main函数中调用fun函数中传递的参数变成这样:fun(++i, i++, i++, ++i); 解题思路如下:[html] view plaincopy第二题:  fun(++i, i++, i++, ++i);  //-------------------------------------------计算阶段---------------------------------------------------    1).++i; (当时i=2) 由于是++i 程序会在i的基础上+1 并返回i值 所以不会记录到内存中 最后会直接返回i值  2).i++; (当时i=2) 由于是i++ 所以会将该值保存到内存中 最后会返回该内存中的值 第三个参数c=2  3).i++; (当时i=3) 由于是i++ 所以会将该值保存到内存中 最后会返回该内存中的值 第三个参数b=3  4).++i; (当时i=5) 由于是++i 程序会在i的基础上+1 并返回i值 所以不会记录到内存中 最后会直接返回i值    //-------------------------------------------返回计算结果阶段---------------------------------------------------    5).返回第四个参数  返回i值 d=5      6).返回第三个参数  返回2)中内存地址中的值 c=2      7).返回第二个参数  返回3)中内存地址中的值 b=3  8).返回第一个参数  返回i值 a=5  虽然实例是用java写的,实际运行环境其实是c++,至于为啥。因为vs有反汇编啊。这题单步跟踪调试绝对一头雾水,反汇编反而一目了然。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部