C语言中关键字:register、typedef、static

一.关键字register

        register——寄存器关键字,提到寄存器首先我们先了解一下电脑的存储设备:

        图中三角形内的硬件,由下到上价格越来越高,速率越来越快,存储内存越来越低。
        最早的时候,CPU在处理任务的时候都是直接从内存中拿数据,但是随着技术的快速进步,CPU的设计使得处理速度越来越快,而硬件的速度难以跟上CPU的发展速度,所以导致CPU的数据已经处理完,却还要等一段时间才能拿到下一个数据,使得性能越来越慢。那怎么办呢?于是就有了高速缓存和寄存器的出现,比内存快一些的高速缓存直接从内存中获取数据,比高速缓存快一些的寄存器再从高速缓存中获取数据,这样就大大减少了CPU获取数据的等待时间,提高了整体性能。

         现在我们来看register关键字怎么用:

#include<stdio.h>
int main()
{
    int a=10;
    register int b=12;
    printf("%d %d\n",a,b);
    return 0;
}

        我设置了两个变量a,b。register就是建议把b=3存放在寄存器中,以便可以以更快的速度访问。但是当然只是建议,因为都这样定义的话,寄存器也没有那么多空间可以放,最后放不放还是由编译器进行决定的,如果是经常大量使用的话可以尝试着使用register。

二.关键字typedef

        typedef 顾名思义是类型定义,这里应该理解为类型重命名。比如:


        他的意思可简单理解就是重命名,上面就是把unsigned int重命名为u_int,比如大家把张三起个小名小三一样,张三是这个人,小三也是这个人。

三.关键字static

        在C语言中,static是用来修饰变量和函数的:
        1.修饰局部变量-静态局部变量
        2.修饰全局变量-静态全局变量
        3.修饰函数-静态函数
静态局部变量:
 

#include<stdio.h>
void test()
{
    int a=1;
    a++;
    printf("a=%d\n",a);
}
void test1()
{
    static int a=1;
    a++;
    printf("a=%d\n",a);
}
int main()
{
    int i=0;
    while(i<5)
    {
        test();
        i++;
    }
    return 0;
}

我定义了两个函数,test和test1,前者没用static,那么程序运行会出现什么结果呢  
                
左边第一个运行的是test函数即没有用static,第二个是用test2函数用static修饰了局部变量a。我们可以看到,左边的a一直是2是因为引用函数test时又重新给a赋值为1,再++后就变成了2;而第二个很明显a就直接进行了累加处理而没有重新赋值1,这就说明:static修饰局部变量,把局部变量的生命周期变长
 

 静态全局变量
        全局变量具有全局属性是因为其具有链接属性,而static修饰全局变量就可以改变全局变量的连接属性,可以使它的作用域变小,仅仅局限于当前文件下,它的生命周期没变,因为其仍然存储在静态区上


静态函数
        它的作用跟静态全局变量作用效果基本一样,都是改变其作用域,或者说改变函数的连接属性,将其原本的的外部链接属性变为内部链接属性

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳862

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值