4 回答
TA贡献1155条经验 获得超0个赞
这涉及到变量的作用域,局部变量从作用域的声明到函数的结束,变量在子函数中,其他同名变量将被临时屏蔽。就是这样。在add函数中,sum In add会暂时阻塞sum In main,但是这两个sum与变量不一致,可以在内存中打印出它们的地址来证明。在本例中,add sum接受值3,增加到4,然后输出4,当add函数结束时,main中的sum恢复,但是它们与变量不一致,所以main中的sum没有变化
TA贡献1799条经验 获得超6个赞
不同的函数使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会引起混淆。add函数的num在函数执行后释放内存。打印函数打印主函数的编号。如果将打印函数放在add函数中,则打印值为4
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 } |
- 4 回答
- 0 关注
- 527 浏览
添加回答
举报