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个回答
展开全部
num作用域不同,add函数中num只有在add函数中有效,所以在add函数打印出4,在调用完add函数后num自动清除了,main函数中的num传到add里面的只是值,不是地址,num的值不会改变,所以main函数打印的num值为3没有被改变。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-15
展开全部
局部变量只是对局部或者对同一个括号里的引用生效对全局或者整个函数程序时不生效的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
吐槽:你没有具体说哪里不对,要回答者自己猜,这个习惯好差。我现在猜你的问题是为什么调用了add后,num值没有改变?
答案:因为变量有作用域。两个函数的num的作用域都这个本函数中,换句话说,它们内存地址是不一样的。调用时传递是值。解决方法:1.将num定义为全局变量。
2.使用指针,具体如下
#include<stdio.h>
void add(int *);
int main(void)
{
int num = 3;
add(&num); //调用add()函数
printf("%d\n",num); //输出变量num值为3
}
void add(int *num)
{
*num=*num+1; //num自增1
printf("%d\n",*num); //输出变量num值为4
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf("%d\n",num); //输出变量num值为3
你指的不对,是这里吗?
关于“局部变量作用域”
首先,C语言的函数参数是值传递。也就是说,num这个变量,在main函数和add函数中是两个不同变量。
局部变量的作用域是当前函数,出了函数就释放了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主函数中num是实参,add函数的num是形参,实参和形参的内存单元是不一样的,所以只能做为值传递,而不能直接修改值,如果要修改值的话可以使用指针,比如你函数如果要改变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)++; //num自增1
printf("%d\n",*num); //输出变量num值为4
}
你也可以使用函数返回值,然后把函数返回给num也是可以实现的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询