📜  C-存储类(1)

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

C存储类

C语言中提供了四种存储类,分别为auto、register、static和extern。这四种存储类的主要作用是为程序员提供语言级别的存储控制,可以直接影响程序的存储空间的分配和使用方式。

auto

auto是C语言中默认的存储类,意味着变量会被自动分配存储空间并在生命周期结束后会被自动清理。这种存储方式适用于在函数内部定义的临时变量。

下面是一个使用auto的示例程序:

#include <stdio.h>

int main() {
   auto int a = 10;
   printf("a = %d\n", a);
   return 0;
}

输出结果为:

a = 10
register

register存储类是为了提高程序的性能而引入的。使用register修饰的变量会被分配到寄存器中,而不是分配到内存中。由于寄存器的读取速度要比内存快得多,因此使用register可以提高程序的运行速度。但需要注意,register修饰的变量的取地址操作是非法的,因为它们不在内存中。

下面是一个使用register的示例程序:

#include <stdio.h>

int main() {
   register int i = 0;
   int sum = 0;
   for(i = 0; i < 10000; i++) {
      sum += i;
   }
   printf("sum = %d\n", sum);
   return 0;
}

输出结果为:

sum = 49995000
static

static存储类用于在函数内部定义静态变量,或在外部函数之外定义全局静态变量。静态变量的生命周期与程序生命周期相同,而不是像自动变量那样在函数调用结束后销毁。静态变量在第一次定义时分配存储空间,并且只能被初始化一次。

下面是一个使用static的示例程序:

#include <stdio.h>

void test() {
   static int a = 0;
   a++;
   printf("a = %d\n", a);
}

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

输出结果为:

a = 1
a = 2
a = 3
extern

extern存储类用于在当前文件中引用其他文件中定义的变量。extern声明的变量是全局变量,其生命周期与整个程序相同,因此可以在不同的文件中访问同一个变量。

下面是一个使用extern的示例程序:

// file1.c
int a = 10;

// file2.c
#include <stdio.h>

extern int a;

int main() {
   printf("a = %d\n", a);
   return 0;
}

输出结果为:

a = 10

总之,C语言中的存储类可以提供程序员更细致的存储控制,但是需要注意合理使用,避免出现潜在的安全问题。