c语言局部变量的三种类型auto,static和register详解

一:auto类型的变量        

        auto类型的变量也称作自动型变量,自动型变量是在动态存储去内分配单元,函数返回的时候,编译系统会释放这些存储单元,就是说当函数调用结束后,自动类型变量就会不复存在。        

        在c语言中我们可能很少见到auto这个关键字,原因是当我们没有显式的指定局部变量的存储类型的时候,系统就会默认变量是自动型变量,所以我们根本不用去特意的写上auto这个关键字。

二:静态类static

        用static这个关键字修饰之后的局部变量,是存储在静态区的,也就是说当我们想要保留一个局部变量,而不是像auto型那样出了函数之后就销毁的时候,我们就可以在定义变量的时候用static这个关键字来修饰变量。

        静态局部变量只在第一次定义的时候赋初值,如果在定义的时候没有赋值的话默认赋值为0或者'\0'(根据实型还是字符型)。

下面是一个例子:(一起来算一算输出的结果是什么)


#include<stdio.h>
void fun()
{
    static i=0;
    printf("%d",i);
    i++;
}


int main()
{
    fun();
    fun();
    fun();
    fun();
    return 0;
}//程序的结果是什么

当我们明白了static这个关键字的时候我们很容易的就会知道输出的答案是0123,就是因为static修饰的变量在出了函数之后还会保留,所以通常就用这种变量来写一些具有记忆性的函数

三:寄存器变量register

        一般情况下变量是存储在内存中的,当要使用变量进行运算的时候,控制器就会发出指令将内存中的该变量送到运算器中,这样就有一个问题:当我们频繁的使用这个变量的时候,多次的拿取就会造成效率的下降,所以就有了寄存器这种东西。

        寄存器是在运算器中,寄存器变量参与运算的时候不用在内存中存取,这样就提高了执行的效率。

        但是,寄存器的大小是有限的,不能无限的定义寄存器变量,当寄存器大小不足的时候,即使使用了register这个关键字该变量也不会存储到寄存器中。

        总的来说,寄存器变量就是适合那种多次的频繁使用的变量,用于提高运算的效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值