您的位置:首页 > 编程语言 > C语言/C++

【C语言】C语言储存类型关键字详细解析

2016-05-19 21:08 465 查看
储存类型关键字(4个)

auto  声明自动变量
auto被解释为一个自动存储变量的关键字,也就是申明一块临时的变量内存。默认情况下,函数体内的变量都是auto。
如: auto int n = 2333; 表示n为一个自动存储的临时变量。

register  声明寄存器变量
这个关键字作用是请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。
如: register int x;
需要注意的是:
1、由于register声明的变量不是存储在内存中,所以不能使用“&”对变量取地址。
2、只有局部变量和形参可以作为 register 变量。

extern  声明外部变量
此关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
如:
test1.c:
#include <stdio.h>
int i;
int main()
{
i = 2333;
}
test2.c
int i;
使用编译器进行编译,则会报错,因为在test1.c和test2.c中对变量i重复定义了。
但如果:
test1;
#include <stdio.h>
extern int i;
int main()
{
i = 2333;
}
test2.c:
int i;
则编译器在编译test1.c时,会从test2.c文件中寻找变量i的定义声明,而这样编译则是没有问题的。

static  声明静态变量
1.修饰变量
静态全局变量:作用域仅限于变量被定义的文件中,并且作用域是从变量定义的位置开始,到文件末尾结束。
为了方便建议定义到文件的最开始位置。

静态局部变量:存在于内存的静态区,作用域在定义的函数体内,并且函数调用完成后不被释放,下次仍然可以用到这个值。

如何对两者进行区分,且看下面这个例子:
static int j;
void func1(void);
void func2(void);
void func1(void)
{
static int i = 0;
i++;
printf("i :%d\n", i);
}

void func2(void)
{
j = 0;
j++;
printf("j :%d\n", j);
}

int main(int argc, char **argv)
{
int k = 0;
for(k = 0; k < 10; ++k)
{
func1();
func2();
}
return 0;
}
输出结果: i: 1、2、3、4、5、6、7、8、9、10
j: 1、1、1、1、1、1、1、1、1、1

2.修饰函数
函数前添加 static 指函数的作用域仅限于本文件(所以称为内部函数),避免了符号的重命名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: