爱问知识人 爱问教育 医院库

C语言 还是嵌套

首页

C语言 还是嵌套

int  x = 5,  y = 7;
void  swap ( )
{  int  z ;
z = x ;  x = y ;  y = z ;
}
main( ) 
{  int  x = 3,  y = 8;
swap ( ) ;
printf ( " %d ,  %d \n ",  x ,  y ) ;
}
A)  3 ,  8          
B) 8 ,  3           
C) 5 ,  7          
D) 7 ,  5

我算出来的结果是B,但是答案是A,有什么地方算错了么?

提交回答
好评回答
  • 2019-03-12 16:23:31
      这个问题是这样的,x和y变量都是有两个定义,一个是在main函数外的,一个是在main函数里的,而程序去处理这样的二义性的时候只看跟自己最有关系的定义,也就是局部变量的定义,也就说printf ( " %d , %d \n ", x , y ) ;这句话的里的x和y就是指的是main函数里定义局部变量的x=3、y=8,而不是头上定义的全局的x=5、y=7,而且他们从来就没有被再赋值过,所以,理应选A
    关于补充,这是关于作用域的问题,一般的作用域就是指一对花括号括起来的代码{}
    //------全局作用域开始
    int x = 5, y = 7; 
    //------作用域1开始
    void swap ( ) 
    { int z ; 
    z = x ; x = y ; y = z ; 
    } 
    //------作用域1结束
    //------作用域2开始
    main( ) 
    { int x = 3, y = 8; //----注1
    swap ( ) ; 
    printf ( " %d , %d \n ", x , y ) ; 
    } 
    //------作用域2结束
    //------全局作用域结束
    很简单,当作用域2里的printf函数打印x,y的时候,它会先找自己作用域是否有定义x,y,有的话就直接用了,如果没有定义,才会去外一层的作用域找已经定义的x,y
    swap()函数调用后的效果是把全局作用域下定义的x,y的值改变了,因为swap()函数体中(也就是作用域1中),没有定义x,y,所以他会去找上层作用域(全局),从而进行赋值
    而printf的时候,main()里(作用域2)已经定义了x,y,所以全局变量里定义的x,y在作用域2里是不可视的,且值也没有改变,所以还是x=3,y=8。
      

    烧***

    2019-03-12 16:23:31

其他答案

    2019-03-12 17:03:13
  • 答案是A 没错的!~
    问题的关键在于x和y变量,在程序的最前面的变量声明是全局的,但是在主函数main内,又声明了同名的局部变量。这就涉及到同名的全局和局部变量作用域的问题了。当程序走到局部变量作用域时,全局变量暂时被屏蔽,当离开局部变量的作用域时,同名的全局变量则起作用。
    所以,当调用无参的swap()时,已经离开main函数中x,y的作用域,此时交换的变量是全局的x,y。而main函数输出的则是局部变量的x,y值,所以结果是(A) 3 , 8。
    最好的检验办法,就是在swap()函数的后面添加:printf("%d,%d\n",x,y);即可看出效果!
     
     

    巴***

    2019-03-12 17:03:13

  • 2019-03-12 16:38:10
  • swap实现数值互换。x,y为全局变量,main中再次赋值,后进行交换,即swap函数运行,此时x=8,y=3.
    从而打印结果为B项

    莪***

    2019-03-12 16:38:10

类似问题

换一换

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 173-192
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):