C 语言中的存储类指的是控制变量存储方式和生命周期的关键字。局部变量、全局变量和静态变量等都可以使用存储类关键字进行控制,以达到更加灵活的变量存储方式和更加符合实际需要的生命周期等效果。通常使用的存储类关键字有 auto、register、static、extern 四种。
下面我们来详细介绍一下“C 存储类”的使用攻略。
auto 存储类
auto 存储类是默认的存储类,它将变量存储在栈中,因此它的作用域局限于它所在的块中。一般情况下,我们不需要显式地使用 auto 关键字。
//局部变量默认为 auto 存储类
int main()
{
auto int i = 10;
printf("%d\n", i);
return 0;
}
register 存储类
register 存储类用于声明存储在寄存器中的局部变量。访问寄存器的变量速度更快,因此这种存储方式可用于加快对变量的访问。但是,由于 CPU 寄存器数量有限,因此不能过度使用 register 存储类。
register int i = 10;
printf("%d\n", i);
static 存储类
static 存储类用于在函数调用之间保持局部变量的值。同时,static 还可以用于隐藏函数和全局变量。静态变量的作用域仅限于当前源文件,可以通过外部声明使其成为多个源文件共享的全局变量。
#include <stdio.h>
void fun()
{
// num1为静态局部变量,每次调用后其值不会重置
static int num1 = 1;
int num2 = 1; // num2为非静态局部变量,每次调用后其值都会重置
// 静态局部变量和非静态局部变量的值
printf("num1=%d, num2=%d\n", num1++, num2++);
}
int main()
{
fun();
fun();
fun();
return 0;
}
extern 存储类
在多个源文件中使用同一个全局变量时,可以使用 extern 关键字。extern 声明在一个源文件中引用一个在另一个源文件中定义的全局变量。在使用 extern 来引用变量时,不能初始化变量,因为在使用 extern 时变量已经被初始化。
//File1.c
#include <stdio.h>
// 全局变量num1
int num1 = 10;
void fun()
{
// 输出全局变量num1
printf("%d\n", num1);
}
//File2.c
extern int num1; // 告诉编译器这个 num1 变量在其他文件里
void fun()
{
// 外部引用全局变量num1
printf("%d\n", num1);
}
以上就是关于“C 存储类”的使用攻略,希望能对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C 存储类 - Python技术站