C语言全局变量与局部变量及存储方式

由于变量的作用域不同,我们将变量分为全局变量和局部变量。

局部变量一般是在一个函数内有效,只能在本函数内引用,其他函数不可用。全局变量一般是在函数外定义的变量,我们叫做全局变量。

即在函数内定义的是局部变量,在函数外定义的是全局变量。

来看这个程序。

#include<stdio.h>
int main()
{
int x;
void a();
void b();
x=10;
a(x);
b(x);
printf("%d\n",x);
return 0;
}
void a(int x)
{
x=x+10;
printf("%d\n",x);
}
void b(int x)
{
x=x-10;
printf("%d\n",x);
}

运行结果:

在主函数中,我们定义的x的值为10,传参到a函数使x+10成为20,实际上是对x的副本进行变化,主函数中x的值并未发生改变。同理,传参到b函数使x-10成为0,分别输入三个函数中的x的值,我们可以看到这种变化。

再来看这个程序

#include<stdio.h>
int a=10,b=15;//a,b是全局变量
int main()
{
int max(int a,int b);//函数声明
int a=20;//局部变量
printf("max=%d\n",max(a,b));
return 0;
}
int max(int a,int b)//a,b是形参
{
int c;
if(a>b)
c=a;
else
c=b;
return c;
}

运行结果为:max=20

我们在第二行定义了全局变量a,b并将它们初始化,在主函数中,又定义了一个局部变量a,即在主函数中,全局变量a被局部变量a屏蔽,只有局部变量a起作用,而全局变量b仍有效。因此,函数max接收的数值分别是20和15而不是10和15.因此,程序的运行结果为20.

从变量的存储方式来看,全局变量都存放在静态存储区中,在程序的执行过程中占据固定的存储单元,而不是动态的进行分配和释放。

有静态存储区,对应的就会有动态存储区,在动态存储区中存放函数的形参、函数中没有用关键字static声明的变量和函数调用时的现场保护和返回地址等。这些数据,在函数开始调用时分配动态存储空间,函数结束即释放,在函数调用中,这种分配和释放是动态的。举个例子,若一个函数中存在局部变量,将这个函数调用两次,在两次调用时这个局部变量的地址可能是不相同的。

上面我们提到了一个关键字static。这个关键字的作用是将局部变量成为静态局部变量,使用此关键字后,局部变量不再释放,而是保留局部变量的数值。

使用方法 :static a=0;//静态局部变量

在平常的程序中,我们要避免使用静态局部变量,因为静态存储长期占用内存不释放,而不是像动态存储一样,并且使用静态局部变量会降低程序的可读性。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值