C语言中存储类定义变量(或函数)的范围和生存周期

存储类

在C语言中,存储类定义了变量(或函数)的作用域和生命周期,放在了类型的前面。存储类关键字:auto、register、static、extern。

auto 关键字:表示变量为自动存储类,只能修改局部变量,只有局部作用域,运行时自动创建,运行后自动销毁。所有未指定的局部变量都是这种类型。

register 关键字:用于定义存储在寄存器中的局部变量,而不是存储在内存中,因此无法获取寄存器变量的地址(’&’)。由于它在寄存器中,这意味着变量的类型是有限的。例如,您使用的处理器可能没有足够大的寄存器来存储 double 类型的变量。另请注意,这只是对编译器的请求,而不是命令,编译器将在可用的寄存器数量和可用的高速内存数量之间进行选择,因此不一定遵循您编写的分配。

static关键字:使变量在程序运行过程中存在并保留值。修改全局变量时只能调用同一个文件(.c文件),修改局部变量时只能调用局部变量。

extern 关键字:这只是提供全局变量的声明,可能在其他地方定义,对所有文件可见。

存储类源码

存储类操作结果

另外需要注意的是,在使用typedef的时候,不能和storage class关键字结合使用,否则编译的时候会有马蜂窝的感觉。您不能在声明中使用多个存储类关键字。

关联

在C语言程序中,一个变量有:外部链接、内部链接、空链接(这里是C语言的地方)。

外部链接:外部链接的变量可以在多个文件中使用;

内部链接:内部链接的变量只能在一个文件中使用;

空连接:由定义变量的代码块私有;

C语言变量链接

内存管理

首先根据存储类区分变量:

1、局部变量:自动修改,只有局部作用域,只在运行时存在。操作开始分配内存,操作完成回收内存并在栈上分配。

2、静态局部变量:静态修改的局部变量只有一个局部作用域c语言中怎么动态分配空间,并且只初始化一次。整个程序永远运行,属于静态存储分配空间。

3、全局变量:全局(文件)作用域(其他文件使用extern再次声明访问),程序一直存在,属于静态存储分配空间。

4、静态全局变量:静态修改的全局变量、文件作用域、程序操作始终存在c语言中怎么动态分配空间,由静态存储空间分配。

5、内存动态分配:malloc分配,自由释放,内存持续时间不受固定规则控制,而是由程序员申请和释放,可以在一个函数中申请,在另一个函数中释放。是在堆上分配的。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论