存储分类用于定义变量的范围和使用寿命。C语言编程中有四个存储分类。它们分别如下
-
- auto
- extern
- static
- register
存储类 |
存储地点 |
默认值 |
范围 |
生命周期 |
auto |
RAM |
垃圾值 |
局部 |
函数中 |
extern |
RAM |
零 |
全局 |
直到主程序结束,可以在程序的任何地方声明 |
static |
RAM |
零 |
局部 |
直到主程序结束,保留多个函数之间的值调用 |
register |
寄存器 |
垃圾值 |
局部 |
函数中 |
1. auto变量
auto关键字自动应用于所有局部变量。它是默认存储类,这就是为什么它被称为自动变量。
为了方便演示,首先创建一个工程:storage-classes,然后在此工程下创建一个源文件:auto-example.c,其代码如下
-
#include
<stdio.h>
void main() {
int a = 10;
auto int b = 10;//same like above
printf("%d %d", a, b);
}
|
执行上面示例代码,得到以下结果 -
2.register变量
寄存器(register)变量将寄存器的内存分配给RAM。
其大小与寄存器大小相同。它比其他变量的访问速度更快。
建议仅使用寄存器变量进行快速访问,如计数器。
注意:我们无法获取寄存器变量的地址。
声明示例:
register
int counter = 0; |
3.static变量
静态变量只初始化一次,直到程序结束。它在多个函数调用之间保留其值。静态变量的默认值为0,由编译器提供。
创建一个源文件:static-example.c,其代码如下
-
#include
<stdio.h>
void func() {
static int i = 0;//static variable
int j = 0;//local variable
i++;
j++;
printf("i= %d and j= %d\n", i, j);
}
void main() {
func();
func();
func();
}
|
执行上面示例代码,得到以下结果 -
i= 1 and
j= 1
i= 2 and j= 1
i= 3 and j= 1 |
4.extern变量
所有程序都可以看到(或访问)extern变量。如果两个或多个文件共享相同的变量或函数,则可使用extern变量。
下面是一个声明示例:
|
1059 次浏览 |
9次 |
|
捐助 |
|
|
|
|
|