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

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 
}
为什么不对呢?哪里不对呢?

繁星淼淼
浏览 528回答 4
4回答

白衣非少年

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

BIG阳

这与局部变量作用域无关。它是参数方法。add函数是通过传递一个值而不是指针来调用的。因此,在add中更改num的值不会影响主函数中的num值。

哈士奇WWW

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

有只小跳蛙

add函数里面的num是另一个变量,和主函数中的num不一样。它们两都是临时变量,除了变量名相同没有什么关系。add函数只是通过参数的方式获取了主函数里面的num的值,也就是给了add中的num初始值,但是并没有把计算后的值返回给主函数中的num,所以主函数中的num并没有被改变12345678910111213main(){   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 } 
打开App,查看更多内容
随时随地看视频慕课网APP