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
}
为什么不对呢?哪里不对呢?
展开
 我来答
xoaxa
2018-01-11 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3474万
展开全部
#include <stdio.h>
void add(int);
int main() {
int num = 3;
add(num); //调用add()函数 
printf("%d\n",num); //输出变量num值为3 
return 0;
}

void add(int num) {//这个num是函数add()内的变量(形参属于所在函数),与main()中的num一毛钱关系都没有。
num++; //num自增1 
printf("%d\n",num); //输出变量num值为4 
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-01-27
展开全部
main()
{
int num=3;
add(num); //调用add()函数
printf("%d\n",num); //输出变量num值为3
}这里你已经定义了num并且把num传到了add功能的函数里面了吧。当add的num是3了。下面你有让它自己增加了1,肯定是4吧。输出顺序是先输出4后输出3.先调用的add,离开了add函数,add里面定义的num就没意义了。不知道这样说对不对。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小悟喵喵
2018-01-09 · TA获得超过421个赞
知道小有建树答主
回答量:283
采纳率:78%
帮助的人:169万
展开全部

这里应该就是按值传递和指针传递或者按引用传递之间的区别。

按值传递,传递的是副本,而非真正的num,那么main输出的就还是num=3

如果要让main里面的num也自增,那么就需要按指针传递:

main()
{
  int num=3;
  add(&num);  
  printf("%d\n",num); 
}
void add(int *num)
{
  *num++;  
  printf("%d\n",*num); 
}

或者按引用传递,按引用传递是C++里面的特性,如果是C就没有。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-01-26
展开全部
??你的意思是不懂为什么主函数里输出num为3吗
这个代码相当于
void add(int);
main()
{
int num=3;
add(num); //调用add()函数
printf("%d\n",num); //输出变量num值为3
}
void add(int a)
{
a++; //a自增1
printf("%d\n",a); //输出变量a值为4
}
add函数里的这个参数a,当你运行这个函数的时候,这时候变量a生命周期开始,然后运行a++,print语句,到这里a的生命周期就结束了,a就是一个局部变量。
我讲的是不是有点糊..不懂你再问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hatianxiao
2018-01-05 · TA获得超过2047个赞
知道大有可为答主
回答量:2295
采纳率:77%
帮助的人:1275万
展开全部
传值与传址的区别,你的写法是传值,即传递了main里num的副本,而不是main里num的地址,add函数里面改变的是形参的值,并不能改变main里面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
}
//传递地址
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

提交
取消

辅 助

模 式