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
}
为什么不对呢?哪里不对呢?
展开
 我来答
dominghao
2018-01-05
知道答主
回答量:11
采纳率:0%
帮助的人:5.2万
展开全部
int num = 3 ; 该行代码定义了一个局部变量(内部变量), 改变了的作用域是其所在函数内.其他函数并不可以访问该变量(num). 在你的main函数内add(num)这行代码,是一个函数调用,传入一个参数num,代码执行到这里就会跳到add(int num)函数的实现, 并把传入的值(也就是num的值)赋值给add函数里面的num, 注意这里是赋值操作,一个是参数,这两个参数没有一毛钱关系, 要说有关系,只是作为函数参数的num把值赋值给add(int num) 函数里的一个也叫num的局部变量. 对.就是这样!!! 至于这里你传入的是值还是地址,有什么不同,那就是函数传值的问题了,这里说的是局部变量的作用域问题.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8fbee656e8
2018-02-06 · TA获得超过1328个赞
知道小有建树答主
回答量:578
采纳率:68%
帮助的人:190万
展开全部
因为你的add函数是传值进来的,不是传址。你对形参自增,也只是将新的变量num自增了而已,原先的变量num,还是不会变的。
除非,你 void add(int *num) { *num = *num + 1;printf("%d\n",*num);}
外面就 add(&num);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
泽国笑玉
2018-01-11
知道答主
回答量:36
采纳率:50%
帮助的人:7.4万
展开全部

对了的,因为add函数在前面所以先输出4,然后再进入主函数的printf输出3,没毛病,老铁

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
子需婉儿
2018-01-26
知道答主
回答量:2
采纳率:0%
帮助的人:1.6万
展开全部
你上面的程序没有不对的啊。因为主函数里的num和add函数里的num不是同一个变量。而且add函数没有返回值,所以在主函数里调用add函数之后,主函数的num不会改变,还是3,但在add函数里,num因为自增,变成了4。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
关注745
2018-01-06 · TA获得超过434个赞
知道小有建树答主
回答量:173
采纳率:80%
帮助的人:134万
展开全部

因为这里是传值调用

int num=3;
add(num); //调用add()函数 

这里只是将num的值3传给了函数add中的变量num,add函数中的num加1,而函数外的num并没有什么变化

int num=3;与add(num),两个num并不是同一个变量。

应该改为:

void add(int*);
main()
{
int num=3;
add(&num); //调用add()函数 
printf("%d\n",num); //输出变量num值为4
}
void add(int* num)
{
(*num)++; //*num自增1 
printf("%d\n",*num); //输出变量*num值为4 
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式