c语言全局变量和局部变量的问题

时间: 发布人:xyj84

c语言全局变量和局部变量的问题

已解决问题

谷歌xyj84用户在提交了关于“梵蒂冈c语言全局变量和局部变量的问题”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-23T00:59:11。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,你无异于雪中送炭,让我感激涕零 !

希望以下的回答,能够帮助你。

第1个回答

用户名:慶en誱  

解答问题前,先说明一下,当全局变量和局部变量同名时,来自要看当前代码所处的作用域,默认使用当前作用域内的同名局部变量。

分析你所提供的代码:

#include<stdio.h>

inta=4;//全局变量
intf(intn)
{
intt=0;
staticinta=5;//局部静态变量
if(n%2)
{
inta=6;//if作用域内局部变量
t+=a++;//此处的a是指if作用域内的问答局部变量,该变量在作
/慢变深带底/域结束后,生存周期结束。
}
else
{
inta=7;//else作用域内局部变量
t+=a++;//此处的a是指else作用域内的强阻课钱命用然缩数某清局部变量
//作用域结束后,生存周期结束
}
returnt+a++;//此外的a是指f函数作用域内的静态局部变量,
//每次f函数调用return后,此静态局部变量a自增1
}

intmain(void)
{
ints=a,i息立束境宣角盾象书套=0;//根据作用米和础农口域,此处的a是指全局变量,所以s初始值为4
for(;i<2;i++)s+=f(i);
printf("%d\n",s);
return0;
}

根据以上,分析运行流增肥程:

由上可知,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没有影响。