C语言中,局部变量和全局变量的问题

我想问问题1:可不可以这样理解,f1,f2中没有定义局部变量,本题中直接操作的都是局部变量x。问题2:局部变量x仅在main函数中有效,f1,f2,可以直接拿来用吗?in... 我想问
问题1:可不可以这样理解,f1,f2中没有定义局部变量,本题中直接操作的都是局部变量x。
问题2:局部变量x仅在main函数中有效,f1,f2,可以直接拿来用吗?
int x=1;
void f1()
{
x++;
}

void f2()
{
x=5;
}

int main(void)
{
x=10;
f1();
printf("%d\n",x);
f2();
printf("%d\n",x);
return 0;
}
f1,f2中没有定义局部变量,操作的都是main中的局部变量x,是吗
展开
 我来答
天彬司马夏岚
2019-05-20 · TA获得超过3931个赞
知道大有可为答主
回答量:3201
采纳率:26%
帮助的人:187万
展开全部
解答问题前,先说明一下,当全局变量和局部变量同名时,要看当前代码所处的作用域,默认使用当前作用域内的同名局部变量。
分析你所提供的代码:
#include
int a = 4;
//全局变量
int f(int n)
{
int t = 0;
static int a = 5;
//局部静态变量
if( n%2 )
{
int a = 6;
// if作用域内局部变量
t += a++;
// 此处的a是指if作用域内的局部变量,该变量在作用
// 域结束后,生存周期结束。
}
else
{
int a = 7; // else作用域内局部变量
t += a++;
// 此处的a是指else作用域内的局部变量
// 作用域结束后,生存周期结束
}
return t+a++;
// 此外的a是指f函数作用域内的静态局部变量,
// 每次f函数调用return后,此静态局部变量a自增1
}
int main ( void )
{
int s=a, i=0;
// 根据作用域,此处的a是指全局变量,所以s初始值为4
for(;i<2;i++) s+=f(i);
printf("%d\n",s);
return 0;
}根据以上,分析运行流程:
由上可知,s初始值为4;
当i=0时,第一次循环,调用f()函数,由于0%2为0,会进入else后代码,此时t=0+7=7,调用f()函数的return时,会返回7+5=12,同时f()函数的静态局部变量a由5变为6(下次调用生效),s=4+12=16。
当i=1时,第二次循环,调用f()函数,由于1%2为1,会进入if后代码,此时t=0+6=6,调用f()函数的return时,会返回6+6=12,同时f()函数的静态局部变量a由6变为7(下次调用生效),s=16+12=28。
当i=2时,循环终止,打印s值为28。
关于最后的问题,是因为f()函数中if后面的变量a作用域只限制在if后的花括号内,代码退出该作用域后,该变量生存周期结束而被释放,return中使用的a是f()函数中定义的静态局部变量a,所以,不管前者如何赋值,对return中的a没有影响。
前恒闫香旋
2020-01-11 · TA获得超过3900个赞
知道大有可为答主
回答量:3170
采纳率:32%
帮助的人:198万
展开全部
只有void
countValue()里的cnt是局部变量,而sum还是全局变量,
而printf里输出的全是全局变量的值(因为局部变量只在countValue函数里其作用,在这个函数里全局变量sum被重新赋值为0,在sum++后,在printf打印出来的就是1了)
你可以把int
cnt=0;sum=0;改成int
cnt=0;int
sum=0;看看,输出的就全是6了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞沛和妙珍
2019-04-06 · TA获得超过3942个赞
知道大有可为答主
回答量:3107
采纳率:25%
帮助的人:423万
展开全部
int
cnt=0;sum=0;要是这里没有错的话,就是cnt=0后面是分号,那么sum一定会输出1
因为sum是全局变量
cnt在子函数中时局部变量,所以cnt是不会改变的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风雷九州
2015-03-25 · TA获得超过3025个赞
知道大有可为答主
回答量:1127
采纳率:100%
帮助的人:412万
展开全部
1、f1和f2操作的是全局变量x
2、局部变量仅在定义的函数中有效,所以f1和f2是不可能访问的。同时局部变量会覆盖掉同名的全局变量,如果需要使用同名的全局变量,需要使用域运算符::。

即main函数中printf的x是局部变量,而f1和f2操作是全局变量x。
更多追问追答
追问
那调用f1,f2的时候,是怎样的一个过程呢?
追答
调用f1和f2,都是给全局变量x赋值就可以了。楼主说的过程是什么意思?

f1和f2也没有参数,对main函数完全无影响呀。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-03-25
展开全部
是的,main中的x,可以被f1和f2使用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式