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
}
为什么不对呢?哪里不对呢?
展开
 我来答
Hxsid0bb
2018-01-19 · TA获得超过168个赞
知道答主
回答量:389
采纳率:60%
帮助的人:56.2万
展开全部
你问的问题不太清晰,不知道你说的什么不对。
如果你想问问什么printf("%d\n",num); //输出变量num值为3 ,而不是4.那么是因为add函数中的num是临时开辟的参数空间, 与main中的num并不是同一个地址,所以add中num++并没有改变main中的num,所以main中的num仍然是3,所以打印3.如果想add中num的值改变后main中的num改变,可以用指针参数实现。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dnbvhouse
2018-01-16
知道答主
回答量:3
采纳率:0%
帮助的人:2670
展开全部

主函数应该有返回值,或者void

还有没有加入头文

件 #include <stdio.h>

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e096309
2018-01-15 · TA获得超过1327个赞
知道小有建树答主
回答量:501
采纳率:96%
帮助的人:415万
展开全部

这并没有错,应该说是期望的行为。。

int num=3;这句定义了一个变量并往里存放了一个3。而add(num)则是复制了一个3,放到了add函数里的变量num里,这个变量跟main函数里的没有任何关系(除了初始值是main函数那里传过来的)。

在add函数里修改num,修改的是add函数里自己的变量,main函数里的3还是3。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LZ斗逗
2018-02-03
知道答主
回答量:10
采纳率:100%
帮助的人:3万
展开全部
没有错的地方啊,先执行函数add,输出4,再回到主函数输出3,结果是4,3.因为add函数里num是局部变量,不改变主函数中的变量,如果要改变只能通过指针,采纳一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
laneast
2018-01-09 · TA获得超过471个赞
知道小有建树答主
回答量:258
采纳率:100%
帮助的人:198万
展开全部

当你调用 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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式