C语言作用域与生存期

作用域与生存期

作用域(scope)

通常来说,限定某个名字的可用性的代码范围就是该名字的作用域。

根据变量声明时的位置,可将其分为全局变量和局部变量。

全局变量(global) 也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件,其作用域是整个源程序。程序中所有未再次被声明的名字都会被认为是全局声明中的名字。

局部变量(local) 也称为内部变量,它是在函数内部定义说明的。其作用域仅限于函数内,即其所在的花括号{…}内,离开该函数后再使用这种变量是非法的。

生存期

生存期即变量值存在的时间,可以分为静态存储方式和动态存储方式。可见生存期只是和变量存储的位置相关。

静态存储(static) 全局变量即属于静态存储,通常是由编译器在编译时分配分定存储单元(静态存储区)并一直保持不变,在函数调用结束后不消失而保留原值,生存期为整个程序运行过程。

动态存储(auto) 函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),如不专门声明为 static 存储类别,都属动态存储,都是系统在运行时动态地分配存储空间的,数据存储在动态存储区(栈区)中,在函数调用结束时就自动释放这些存储空间。

#include <stdio.h>

static int a;
const int b = 1;

main(){
	auto int c;
	const int d = 1;
	static int e;
}

如图,a是一个全局静态变量,未初始化,其默认值为0,可读可写,写入的值在函数调用结束后不消失而是保留,一直储存在静态存储区,作用域是整个源程序,生存期为整个程序运行过程;

b是一个全局静态常量,省略了static,已初始化,值为1,可读不可写,一直储存在静态存储区,作用域是整个源程序,生存期为整个程序运行过程;

c是一个局部动态变量,未初始化,其默认值是不确定随机数,只有在函数被调用时才分配存储空间,可读可写,写入的值在函数调用结束后消失,作用域是其所在的花括号{…}内,生存期从函数调用开始到函数调用结束;

d是一个局部动态常量,省略了auto,已初始化,值为1,只有在函数被调用时才分配存储空间,可读不可写,作用域是其所在的花括号{…}内,生存期从函数调用开始到函数调用结束;

e是一个局部静态变量,未初始化,其默认值为0,可读可写,写入的值在函数调用结束后不消失而是保留,一直储存在静态存储区,作用域是其所在的花括号{…}内,生存期为整个程序运行过程。

本博客参考了百度百科,维基百科及以下资料参考资料1参考资料2

谢谢观看!

猜你喜欢

转载自blog.csdn.net/Lance_of_Longinus/article/details/83034942