A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangxiaoxuxu 中级黑马   /  2016-6-9 10:51  /  1589 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

7 个回复

倒序浏览
第一个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。
                                                                             能理解么?
回复 使用道具 举报
补充一点(a++)和(++a) 是表达式,表达式的值和a的值概念是不一样的
表达式 :前者先用后++  ,后者先++后用  so~
回复 使用道具 举报
亲,还是亲自测试一把吧。。。
回复 使用道具 举报

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);
}
回复 使用道具 举报
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复 使用道具 举报
dongkuan 发表于 2016-6-9 19:10
第一个a=(a++)括号里的a先变成1,=前面的a也就成了1,然后又把(a++)赋值给了a。(a++)先用再+1,也就是 ...

明白明白
回复 使用道具 举报
1871037345 发表于 2016-6-9 19:37
int a;int getResult(int a){        /*     return ++a;     先把 a 的值 +1 ,再用 a 的值,相当于      ...

感谢感谢   讲的非常清楚
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马