您现在的位置是:首页 >技术交流 >学习笔记:c存储类网站首页技术交流
学习笔记:c存储类
✨博文作者:烟雨孤舟
💖 喜欢的可以 点赞 收藏 关注哦~~✍️ 作者简介: 一个热爱大数据的学习者
文章目录
目录
简介
存储类定义 C 程序中变量/函数的的存储位置、生命周期和作用域。这些说明符放置在它们所修饰的类型之前。C 程序中可用的存储类:auto、register、static、extern
局部变量:auto:自动变量,离开定义函数立即消失
register:寄存器变量,离开定义函数立即消失
static:静态变量,离开定义函数仍然存在
局部变量只作用于该函数内部
全局变量:在程序运行期间一直存在
static:静态变量,仅限于本文件内部条用
extern:外部存储变量,用于声明本文件将要用到的其他文件的变量
auto 是局部变量的默认存储类, 限定变量只能在函数内部使用;
register 代表了寄存器变量,不在内存中使用;
static 是全局变量的默认存储类,表示变量在程序生命周期内可见;
extern 表示全局变量,对程序内所有文件可见,类似于Java中的public关键字
auto 存储类
auto 存储类是所有局部变量默认的存储类。定义在函数中的变量默认为 auto 存储类,这意味着它们在函数开始时被创建,在函数结束时被销毁。
{//以下是两个带有相同存储类的变量
//auto只能用在函数内,即auto只能修饰局部变量。
int mount;
auto int month;
}
register 存储类
register 存储类用于定义存储在寄存器中而不是RAM中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个字),且不能对它应用一元的 '&' 运算符(因为它没有内存位置)。
register 存储类定义存储在寄存器,所以变量的访问速度更快,但是它不能直接取地址,因为它不是存储在 RAM 中的。
{
register int miles;
}
static 存储类
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。
static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
#include <stdio.h>
/* 函数声明 */
void func1(void);
static int count=10; /* 全局变量 - static 是默认的 */
int main()
{
while (count--) {
func1();
}
return 0;
}
void func1(void)
{
/* 'thingy' 是 'func1' 的局部变量 - 只初始化一次
* 每次调用函数 'func1' 'thingy' 值不会被重置。
*/
static int thingy=5;
thingy++;
printf(" thingy 为 %d , count 为 %d
", thingy, count);
}
extern 存储类
extern 存储类用于定义在其他文件中声明的全局变量或函数。当使用 extern 关键字时,不会为变量分配任何存储空间,而只是指示编译器该变量在其他文件中定义。
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
总结
数据类型------房子的大小
变量与常量-----房子的名称
存储类-----------房子的使用权限以及使用期限
整段程序---------房子的使用者
静态变量(不能被其他源文件调用的全局变量)