📜  C存储类(1)

📅  最后修改于: 2023-12-03 15:14:25.641000             🧑  作者: Mango

C存储类

什么是存储类

存储类指的是在程序中定义和使用变量时,用来描述变量的生命周期、作用域和存储方式的特性。C语言中有4种存储类:

  • 自动存储类(auto)
  • 寄存器存储类(register)
  • 静态存储类(static)
  • 外部存储类(extern)
自动存储类

auto存储类是所有变量的默认存储类。在函数中定义的变量,默认属于auto存储类。auto存储类的变量生命周期与函数执行周期相同,函数调用结束时变量被释放。

#include <stdio.h>

int main() {
   int num = 10; //在函数内部定义变量,自动存储类
   printf("num = %d\n", num);
   return 0;
}
寄存器存储类

register存储类与auto存储类有相似之处,也是定义在函数内部的局部变量。不同的是,register存储类会将变量存储到CPU的寄存器中,提高访问速度。由于寄存器的数量有限,不是每个变量都能存储到寄存器中。

#include <stdio.h>

int main () {
   register int num asm("eax"); //寄存器存储类
   num = 10;
   printf("num = %d\n", num);
   return 0;
}
静态存储类

static存储类用于定义具有静态存储持续时间的局部变量。在函数执行时,该变量的值保持不变,知道程序结束。静态变量只会被初始化一次,即使执行函数结束后该变量也不会被释放。

#include <stdio.h>

void func() {
   static int count = 0; //静态存储类
   count++;
   printf("count = %d\n", count);
   return;
}

int main() {
   func();
   func();
   return 0;
}
外部存储类

extern存储类用于在一个源文件中定义变量,另一个源文件中使用该变量。在一个文件中定义变量时,使用extern关键字使得其他文件可以访问该变量。

//file1.c
#include <stdio.h>
int count=0; //定义全局变量

void func(void) {
    extern int count; //使用外部存储类声明全局变量
    count++;
    printf("count=%d", count);
}

//file2.c
#include <stdio.h>
extern int count; //使用外部存储类定义全局变量
void func(void);

int main() {
    func();
    return 0;
}

以上是C语言中四个存储类的介绍。程序员们可以根据变量的作用和需求,选择不同的存储类。