C语言“局部变量作用域”的问题
voidadd(int);main(){intnum=3;add(num);//调用add()函数printf("%d\n",num);//输出变量num值为3}void...
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
}
为什么不对呢?哪里不对呢? 展开
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
}
为什么不对呢?哪里不对呢? 展开
122个回答
展开全部
应该是没有问题的。先输出add函数中的num值4,再输出main函数中的num值3。main函数中的num值没有发生变化。实参传递给形参,形参改变了不会影响实参。
具体分析过程如下图:
程序代码如下:
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
}
在Visual C++ 6.0中编译会有个警告,不影响。
warning C4013: 'printf' undefined; assuming extern returning int
0 error(s), 1 warning(s)
如果要去除警告,只需程序开始加一条:#include<stdio.h>
在Visual C++ 6.0中运行结果如下图:
推荐于2018-01-06
展开全部
这里涉及到变量作用域的问题,局部变量的作用域从声明开始,到所在函数的结束,,在子函数内的变量,同名的其他变量将被暂时屏蔽。所以会出现以上情况。在add函数内,add内的sum将暂时屏蔽main内的sum,但这两个sum并不是同意变量,你可以将他们在内存的地址打印出来证明一下。这时候add的sum接收传入的值3,自增后为4,将打印4,在add函数结束后,main内的sum恢复作用,但他们不是同意变量,所以main内的sum值并没有改变
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码注释部分是正确的。函数传参是值传递,并没有返回计算值,所以在main函数中num的值仍为3。这样写就很清楚了。传递的变量名与之前的值是不同含义的。
#include <stdio.h>
void add(int);
int main()
{
int num=3;
add(num); //调用add()函数
printf("%d\n",num); //输出变量num值为3
}
void add(int x) //值传递
{
x++; //参数x自增1
printf("%d\n",x); //输出变量x值为4
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询