【C语言】变量、变量的存储区域和存储类型

变量:即在程序运行过程中数值可变的数据;为提高程序的可读性,变量名一般由用户根据其用途自行命名,变量名由字母、数字、下划线组成,且不能以数字开头,不能与C语言的关键字重名;在程序运行时,变量占内存空间的大小由其数据类型决定。在使用前,必须声明变量,一般格式:
<存储类型> <数据类型> <变量名>;
局部变量:在所有函数内定义的变量(包括函数参数)都是局部变量。程序中一般都是局部变量,另外局部变量只在自己的函数内有效,即不可被其他函数使用,因此不同函数的局部变量可以重名而不引起冲突
全局变量:在函数体外定义的变量为全局变量。在整个程序运行阶段都占用内存不被释放;在定义后,同一源文件下其后面的全部函数都可访问它(除函数内有同名的局部变量外,当局部变量和全局变量同名时,局部变量起作用,全局变量在该函数内被屏蔽);全局变量在程序中带来了方便,实现了同一源文件下函数间的数据传输,但也破坏了程序模块的封装性和数据安全性,一般不能多用。

变量的存储区域:变量的存储类型决定了其存储区域,运行一个程序时,系统会分配一块内存用来存放代码和各种变量,内存分为三个区域:程序代码区、全程数据区和短程数据区(堆栈区)。变量存储在内存中或寄存器中。
【C语言】变量、变量的存储区域和存储类型

变量的存储类型:
auto(自动存储):修饰的变量存储在堆栈区,习惯上省略不写,如没有其他存储类型修饰则默认为自动存储;auto型的局部变量随函数调用而生成,函数调用结束而释放,一般用得较多。如修饰的变量不进行初始化,则系统会随机给一个值。 (auto) int i。
static(静态存储):修饰的局部变量存储在全程数据区,静态局部变量在程序运行中也不会被释放,直至程序结束,因此有记忆功能,每次调用都保留上一次操作的值;修饰的全局变量只能被本文件内的函数使用,其他源文件不可访问。如修饰的变量不进行初始化,则系统默认赋为0。
static int i;
extern(外部存储):用来修饰全局变量,修饰的变量是其他的源文件的全局变量,表示在该文件下引用了其他源文件的的全局变量,实现了不同源文件的数据传输(但用static修饰的全局变量不可被其他文件访问)。
extern int i;
register(寄存器存储):修饰的局部变量存储在寄存器中,若变量被频繁使用,则可缩短变量的操作时间,加快程序的运行速度。一般修饰的变量不能太多且数据长度应该小于或等于整数的长度,因为寄存器数量有限且主要工作不是用来存储的,定义多了系统会自动把多出的register变量当做auto处理。只能应用于auto变量或者函数的形参,且不能用&取地址。
register int i;

另外,extern修饰的函数同修饰全局变量功能相似,可省略不写;static修饰的函数也称内部函数,只有同一源文件内的函数才可调用。


#以上是在零乱的大脑里整理出来的一些基本知识,如有疑问或者建议,欢迎大家提出和讨论呀!