关键字的作用以及注意事项

register:

       如果一个变量被register修饰,就意味着该变量会作为一个寄存器变量,让该变量的访问速度达到最快。register的作用:请求编译器尽可能(因为CPU内部寄存器有限)地将变量存在CPU内部寄存器中,从而省去了CPU从内存抓取数据的时间,提高了运行效率。如果一个变量频繁地被访问,可以用register修饰这个变量。
       使用register有以下注意事项:
       1.register只能修饰局部变量,不能修饰全局变量。全局变量有可能被多个进程访问,只有当前进程知道全局变量的位置。
       2.不能对寄存器变量使用取地址符“&”,因为该变量没有内存地址,而“&”获取的是内存地址。
       3.register修饰的变量一定是CPU所能接受的数据类型。

static:

       作用:static即可以修饰变量,也可以修饰函数。修饰的变量包括全局变量和局部变量。static在修饰局部变量时,延长了局部变量的生命周期,直至程序执行结束后释放。static修饰全局变量时,只能在其所在的文件可见,其他文件不可见。static修饰的变量存放在数据段的静态数据区(data区),如果没有初始化,系统会默认舒适化为0。static修饰函数的作用与修饰全局变量大同小异,static修饰的函数只能在本文件调用,其他文件不可调用。

extern:

        extern是一个外部声明,其修饰的变量以及函数是在其他文件中定义的,在这里声明使用它,这样多个原文件共享变量和函数。

const:

        作用:const修饰一个变量,该变量是只读变量,不能通过变量名去修改对应空间的值。const修饰函数形参时,可以避免在函数的实现过程中修改函数的值,便于调试。

        const离谁近,谁就不能修改;使用时,要对变量初始化。例:

        const int a = 10;

        int const a = 10;

        const int *p;

        const int a[10] = {1,2,3,4,5,6,7,8,9,10};

        上述例子把数据类型去掉,然后看const修饰谁,发现分别修饰a,a,*p,a[10],说明这些变量的值不变。


typedef:

       作用:

       1.给数据类型重起名字,提高代码的移植性。

       2.方便在编程中定义变量,提高编写效率。

       3.解释某些变量的意思,起注释作用。


typedef与#define的区别:

       1.执行时间不同:

    关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能;#define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何语法检查。

    2.功能不一样:

    typedef用来定义类型的别名,定义与平台无关的数据类型,与struct的结合使用等;#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。

    3.作用域不一样:

    #define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。而typedef有自己的作用域。


volatile:

      volatile是被设计用来修饰被不同线程访问和修改的变量。如果不加入volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。

      volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。简单地说就是防止编译器对代码进行优化.

    


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值