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个回答
展开全部
#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就没意义了。不知道这样说对不对。
{
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就没意义了。不知道这样说对不对。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里应该就是按值传递和指针传递或者按引用传递之间的区别。
按值传递,传递的是副本,而非真正的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就是一个局部变量。
我讲的是不是有点糊..不懂你再问
这个代码相当于
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就是一个局部变量。
我讲的是不是有点糊..不懂你再问
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
传值与传址的区别,你的写法是传值,即传递了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
}
为了达到你的预期,我们可以:
//传递引用
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
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询