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个回答
展开全部
int num = 3 ; 该行代码定义了一个局部变量(内部变量), 改变了的作用域是其所在函数内.其他函数并不可以访问该变量(num). 在你的main函数内add(num)这行代码,是一个函数调用,传入一个参数num,代码执行到这里就会跳到add(int num)函数的实现, 并把传入的值(也就是num的值)赋值给add函数里面的num, 注意这里是赋值操作,一个是参数,这两个参数没有一毛钱关系, 要说有关系,只是作为函数参数的num把值赋值给add(int num) 函数里的一个也叫num的局部变量. 对.就是这样!!! 至于这里你传入的是值还是地址,有什么不同,那就是函数传值的问题了,这里说的是局部变量的作用域问题.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你的add函数是传值进来的,不是传址。你对形参自增,也只是将新的变量num自增了而已,原先的变量num,还是不会变的。
除非,你 void add(int *num) { *num = *num + 1;printf("%d\n",*num);}
外面就 add(&num);
除非,你 void add(int *num) { *num = *num + 1;printf("%d\n",*num);}
外面就 add(&num);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你上面的程序没有不对的啊。因为主函数里的num和add函数里的num不是同一个变量。而且add函数没有返回值,所以在主函数里调用add函数之后,主函数的num不会改变,还是3,但在add函数里,num因为自增,变成了4。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为这里是传值调用
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
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询