C语言中局部变量、全局变量和静态变量的生命周期

本文主要内容:C语言中局部变量、全局变量和静态变量的生命周期。

一、局部变量

1.定义

局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。局部变量的作用域是定义该变量的函数或定义该变量的复合语句。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。

[以上来自百度百科]

2.代码例子

  • 我们来看一个例子:
    在下面的代码中,有x、y、z、a、b、c、arr[]七个变量,它们都定义在函数内部,x、y、z定义在add(int,int)函数内部,其余都定义在main()函数内部。所以,它们都是局部变量。
int add(int x,int y){
    x=2;
    y=3;
    int z=x+y;
    return z;
}
int main(){
    int a=1;
    int b=1;
    int c=add(a,b);
    printf("%d + %d = %d",a,b,c);
    int arr[5]={1,2,3,4,5};
    print(arr[0]);
    return 0;
}

3.代码执行过程解析

  • 接下来,我们通过调试更加直观的去理解局部变量的生命周期

  • 1、初始状态,未对变量进行赋值。a、b、c的值均为随机值,而main函数中没有函数x、y,即变量x、y不存在与main函数中。

初始状态

  • 对a、b进行赋值,并将a、b的值复制给add函数的两个参数,赋值时,a、b的值均为1

待传值

  • 进入add函数内部,x、y被赋以a、b的值

传值成功

  • add函数将结果返回,x、y、z的值被“丢弃”,生命周期结束,函数将数值赋值给c

函数执行结束

4.总结

局部变量,生命周期如其名字,只“存活”在局部。而这里的局部指的就是函数的内部,一旦它所在的函数执行结束,它的生命周期也随之结束。在使用局部变量时(尤其是指针类变量),要注意它的作用范围,不然可能造成不可控制的错误。

二、全局变量

变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。

[以上来自百度百科]

全局变量的定义和声明在此不做讲解,待博主学成归来会另出一篇详细讲解,会回来这里粘贴链接。
全局变量的定义和声明:【待补充】

1.总结

全局变量,存储在静态存储区中,生命周期同样如其名字,存活在“全局”。而这里的全局,往往指的是整个c文件。全局变量往往定义在函数外部(如.h文件中)。

特殊-静态变量

静态变量(Static Variable)在计算机编程领域指在程序执行前系统就为之静态分配(也即在运行时中不再改变分配情况)存储空间的一类变量。与之相对应的是在运行时只暂时存在的自动变量(即局部变量)与以动态分配方式获取存储空间的一些对象,其中自动变量的存储空间在调用栈上分配与释放。

[以上来自百度百科]

1.定义格式

静态变量定义格式:

static ElemType value_name;

2.代码例子

静态变量一个经典的例子就是输出阶乘表。下面的fact_s()函数没有使用循环语句实现阶乘,而是靠静态变量f保存上次函数调用的值,递归计算得到(n-1)!的值,再乘上n,就得到n!。注意此处的fact_s()仅靠单次调用是无法得到n!的。

#include <stdio.h>
double fact_s(int n);
int main(void){
	int i, n;
	printf("Input n:");
	scanf("%d", &n);
	for (i=1; i<=n; i++){
		printf("%3d! = %.f\n", i, fact_s(i));	//输出i和i! 
	}
	return 0;
}	
double fact_s(int n){
	static double f = 1;	//定义静态变量,第一次赋值为1
	f = f*n;
	return (f); 
}

运算结果如下:
静态变量_阶乘运行结果

3.总结

静态变量,存放在静态存储区中,不会像普通局部变量因为函数调用结束而被系统收回,它的生存周期也会持续到程序结束

本文内容为个人学习总结所得,如有错误欢迎指正。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
C语言有四种类型的变量:局部变量全局变量、静态局部变量和静态全局变量。 1. 局部变量(Local Variables): 局部变量是在函数内部声明的变量,它们只在函数内部可见和访问。局部变量的作用域仅限于声明它们的函数内部。当函数执行完毕后,局部变量会被销毁,其占用的内存也会被释放。 2. 全局变量(Global Variables): 全局变量是在函数外部声明的变量,它们可以被程序的所有函数访问。全局变量的作用域从声明开始的地方一直延伸到文件的末尾。全局变量在整个程序的执行过程都是存在的,因此会占用内存。需要注意的是,在多个文件使用同名的全局变量会导致冲突,因此应该避免这样的情况发生。 3. 静态局部变量(Static Local Variables): 静态局部变量与普通局部变量相似,都是在函数内部声明。不同之处在于,静态局部变量只会在首次进入该函数时进行初始化,之后的函数调用不会重新初始化该变量。同时,静态局部变量的作用域仍然限制在声明它们的函数内部,但是其生命周期会延长到整个程序的执行过程。 4. 静态全局变量(Static Global Variables): 静态全局变量与普通全局变量相似,都是在函数外部声明。不同之处在于,静态全局变量只能在声明它们的文件内部访问,其作用域被限制在当前文件范围内。其他文件无法访问该变量。静态全局变量会在程序开始执行时进行初始化,并且在整个程序执行期间都存在。 以上就是C语言四种不同类型的变量:局部变量全局变量、静态局部变量和静态全局变量的特点和用法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小橘子xxb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值