为了账号安全,请及时绑定邮箱和手机立即绑定

关于C语言中“局部变量作用域”的问题

关于C语言中“局部变量作用域”的问题

C
繁星淼淼 2019-06-07 07:06:18
void add(int);main(){int num=3;add(num); //调用add()函数 printf("%d\n",num); //输出变量num值为3 }void add(int num){num++; //num自增1 printf("%d\n",num); //输出变量num值为4 }为什么不对呢?哪里不对呢?
查看完整描述

4 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞



这涉及到变量的作用域,局部变量从作用域的声明到函数的结束,变量在子函数中,其他同名变量将被临时屏蔽。就是这样。在add函数中,sum In add会暂时阻塞sum In main,但是这两个sum与变量不一致,可以在内存中打印出它们的地址来证明。在本例中,add sum接受值3,增加到4,然后输出4,当add函数结束时,main中的sum恢复,但是它们与变量不一致,所以main中的sum没有变化

查看完整回答
反对 回复 2019-06-08
?
BIG阳

TA贡献1859条经验 获得超6个赞

这与局部变量作用域无关。

它是参数方法。

add函数是通过传递一个值而不是指针来调用的。

因此,在add中更改num的值不会影响主函数中的num值。


查看完整回答
反对 回复 2019-06-08
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

不同的函数使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会引起混淆。add函数的num在函数执行后释放内存。打印函数打印主函数的编号。如果将打印函数放在add函数中,则打印值为4

查看完整回答
反对 回复 2019-06-08
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

add函数里面的num是另一个变量,和主函数中的num不一样。它们两都是临时变量,除了变量名相同没有什么关系。

add函数只是通过参数的方式获取了主函数里面的num的值,也就是给了add中的num初始值,但是并没有把计算后的值返回给主函数中的num,所以主函数中的num并没有被改变

1

2

3

4

5

6

7

8

9

10

11

12

13

main()

{

   int num=3;

   add(num); //调用add()函数 

   printf("%d\n",num); //输出变量num值为3 

}

 

//把变量名换一下就明白了,这个变量和num是两回事,和局部变量作用域没有半毛钱关系

void add(int aa)

{

    aa++; //aa自增1 

    printf("%d\n",aa); //输出变量aa值为4 

}


 


查看完整回答
反对 回复 2019-06-08
  • 4 回答
  • 0 关注
  • 527 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信