黑马程序员技术交流社区

标题: 选择!! [打印本页]

作者: wangxiaoxuxu    时间: 2016-6-9 10:51
标题: 选择!!
1.【单选题】下面代码的输出结果是?
int a;
intgetResult(int a){
    return a++;  
}
int main(){
a = getResult(a);
printf(“a=%d”,a);
{
    int a = 10;
    a = getResult(a);   
}
printf(“a=%d”,a);            
}
A. 0,10
B. 1,10
C. 0,0
D. 0,11

作者: dongkuan    时间: 2016-6-9 19:10
第一个a=(a++)括号里的a先变成1,=前面的a也就成了1,然后又把(a++)赋值给了a。(a++)先用再+1,也就是把表达式的值0又赋值给了已经变成1的a,所以a=0     如果a=(++a),a最后的值就是1.(考的是知识点a++与++a的区别)。

第二个是作用域的问题
{
    int a = 10;
    a = getResult(a);   
}这个定义的int a=10仅仅只在这个大括号里面有效,大括号里面a的值同上最后也=10 ,出了大括号就被系统回收了
所以a的值就是最上面全局变量的值0。
                                                                             能理解么?
作者: dongkuan    时间: 2016-6-9 19:21
补充一点(a++)和(++a) 是表达式,表达式的值和a的值概念是不一样的
表达式 :前者先用后++  ,后者先++后用  so~
作者: 1871037345    时间: 2016-6-9 19:22
亲,还是亲自测试一把吧。。。
作者: 1871037345    时间: 2016-6-9 19:37

int a;
int getResult(int a){
   
    /*
     return ++a;
     先把 a 的值 +1 ,再用 a 的值,相当于
     a = a + 1;
     return a;
     
    */
   
   
    return a++;
   /*
    return a++;
    先用 a 的值,然后再将 a 的值 +1 ,相当于
    return a;
    a = a + 1;
   
    */

    //总结:a 在前就先用,a 在后就后用。
    //     ++ 在前就先计算,++ 在后 就后计算,
}
int main(){
    a = getResult(a);
    printf("a=%d\n",a);
    {
        int a = 10;
        a = getResult(a);
        printf("a=%d\n",a);
    }
    printf("a=%d\n",a);
}
作者: 416997919    时间: 2016-6-9 20:22
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
作者: wangxiaoxuxu    时间: 2016-6-10 21:18
dongkuan 发表于 2016-6-9 19:10
第一个a=(a++)括号里的a先变成1,=前面的a也就成了1,然后又把(a++)赋值给了a。(a++)先用再+1,也就是 ...

明白明白
作者: wangxiaoxuxu    时间: 2016-6-10 21:19
1871037345 发表于 2016-6-9 19:37
int a;int getResult(int a){        /*     return ++a;     先把 a 的值 +1 ,再用 a 的值,相当于      ...

感谢感谢   讲的非常清楚




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2