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个回答
展开全部
你问的问题不太清晰,不知道你说的什么不对。
如果你想问问什么printf("%d\n",num); //输出变量num值为3 ,而不是4.那么是因为add函数中的num是临时开辟的参数空间, 与main中的num并不是同一个地址,所以add中num++并没有改变main中的num,所以main中的num仍然是3,所以打印3.如果想add中num的值改变后main中的num改变,可以用指针参数实现。
如果你想问问什么printf("%d\n",num); //输出变量num值为3 ,而不是4.那么是因为add函数中的num是临时开辟的参数空间, 与main中的num并不是同一个地址,所以add中num++并没有改变main中的num,所以main中的num仍然是3,所以打印3.如果想add中num的值改变后main中的num改变,可以用指针参数实现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这并没有错,应该说是期望的行为。。
int num=3;这句定义了一个变量并往里存放了一个3。而add(num)则是复制了一个3,放到了add函数里的变量num里,这个变量跟main函数里的没有任何关系(除了初始值是main函数那里传过来的)。
在add函数里修改num,修改的是add函数里自己的变量,main函数里的3还是3。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有错的地方啊,先执行函数add,输出4,再回到主函数输出3,结果是4,3.因为add函数里num是局部变量,不改变主函数中的变量,如果要改变只能通过指针,采纳一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当你调用 add(num) 的时候,传入 add() 函数中的是复制了一份的数值,即 void add(sum) {...} 中的 sum 和你传入的 int num = 3; add(num); 是不同的变量。
#include <stdio.h>
void add(int);
void add2(int *);
int main()
{
int n=3;
add(n); //调用add()函数
printf("main: add: %d\n",n); //输出变量n值为3
add2(&n); // 传入了 n 的地址,对此地址的操作,即是对 n 这个数的操作
printf("main: add2: %d\n",n); //输出变量n值为3
return 0;
}
void add(int num)
{
num++; //num自增1
printf("add: %d\n",num); //输出变量num值为4
}
void add2(int *num)
{
*num += 1;
printf("add2: %d\n", *num);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询