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

储存类型关键字(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: 12345678910
          j: 1111111111

2.修饰函数
函数前添加 static 指函数的作用域仅限于本文件(所以称为内部函数),避免了符号的重命名。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值