C语言变量存储

2018-09-16  本文已影响0人  兰帕德

C语言中的变量按照生存周期来区分,可以分为静态存储动态存储
一、静态存储
静态存储是在程序运行过程中分配固定的存储空间。静态存储区中存放了整个程序运行过程中的都存在的变量,如全局变量,因此静态存储区也叫做全局存储区。
二、动态存储
动态存储则是在程序运行过程中根据需要进行动态分配存储空间。动态存储区中存放的变量是根据程序运行的需要进行建立和释放的,如函数形参,自动变量,函数调用时的现场保护和返回地址等。
C语言中存储类别分为四类:自动(auto)、静态(static)、寄存器(register)、外部(extern)。
一、自动存储(auto)
用关键字auto定义的变量为自动变量,auto不写则默认为自动存储。自动存储类别属于动态存储方式。

auto int a, b; //定义自动变量a, b

二、静态存储(static)
用static修饰的变量,如果是定义在函数内部,称之为静态局部变量;如果是定义在函数外部,称之为静态外部变量。

static int a; //定义静态变量a

注意,静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在整个程序运行期间都不释放。静态局部变量在编译时赋初值,即只赋初值一次。
三、寄存器变量(register)
为了提高效率,C语言允许将局部变量的值放在CPU的寄存器中,称之为“寄存器变量”,用关键字register进行声明。

register int a; //定义寄存器变量a

注意,只有局部自动变量和形式参数可以作为寄存器变量,局部静态变量不能定义为寄存器变量;一个计算机系统中的寄存器数量有限,因此不能定义任意多个寄存器变量。
四、外部变量(extern)
用extern声明的变量为外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量。如:

#include <stdio.h>
int main()
{
    extern int a; //声明此处使用的是外部全局变量
    printf("a的值为%d\n", a);
    return 0;
}
int a = 5;
上一篇 下一篇

猜你喜欢

热点阅读