存储类
在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分配,自由释放,内存持续时间不受固定规则控制,而是由程序员申请和释放,可以在一个函数中申请,在另一个函数中释放。是在堆上分配的。
请登录后发表评论
注册
社交帐号登录