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
}
为什么不对呢?哪里不对呢?
展开
 我来答
沧海雄风2009
2018-01-09 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:3000万
展开全部

因为main函数中的num的作用域只在main函数内

你传参其实只是把num 的值 3传递给了add的入参 num ,

这个num的作用域是add,是add的一个局部变量

如果你要改变main中num的值

#include <stdio.h>
void add(int*);
main()
{
        int num=3;
        add(&num); //调用add()函数 
        printf("%d\n",num); //输出变量num值为3 
}
void add(int *num)
{
        *num+=1; //num自增1 
        printf("%d\n",*num); //输出变量num值为4 
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丿艾瑞灬莉娅
2018-01-09 · TA获得超过916个赞
知道小有建树答主
回答量:926
采纳率:78%
帮助的人:447万
展开全部
主函数和add()函数里的变量名字虽然都是num,但是他们确是不同的两个变量,因为他们在内存中有独立的空间存储。你在主函数把num的值传入add()函数,相当于做了如下操作:
add.num = main.num;(只是赋值而已)
add()函数执行完后,add()函数里的num变量也就消亡了,对主函数的num并没有影响
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fae334b
2018-01-20 · TA获得超过270个赞
知道小有建树答主
回答量:424
采纳率:64%
帮助的人:155万
展开全部
你的add函数并没有把你的num的值改变,
它实际上是创建一个新的变量, 这个变量的值等于num的值 然后你在add函数里printf出来的num不是你在 main()函数中定义的. 所以你main()函数中定义的num还是3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
黄爷子
2018-01-19 · TA获得超过1090个赞
知道小有建树答主
回答量:731
采纳率:14%
帮助的人:239万
展开全部
你是说经过了add函数后num的值依然是3没有变为4吗?

因为你的函数是传值运算,只是把num的值作为参数进行计算,本身num的值是不改变的
如果你把num的地址传给函数定义的指针的话,num的值就会改变。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
弈轩
2018-01-13 · 知道合伙人教育行家
弈轩
知道合伙人教育行家
采纳数:1029 获赞数:7548
电子设计大赛三等奖 优秀毕业生

向TA提问 私信TA
展开全部

首先头文件#include <stdio.h>不能少

#include <stdio.h>
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里面的num,调用add()函数后,num的实际值增加1?

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式