美文网首页C语言C语言从入门到入坟
C语言学习:C语言关键字(二)

C语言学习:C语言关键字(二)

作者: 源世界Z | 来源:发表于2018-05-27 16:12 被阅读0次

正文共:1853 字 1 图。预计阅读时间: 5 分钟

主要内容:C语言关键字详解

C语言register关键字—最快的关键字

register:这个关键字请求编译器尽可能的将变量存在CPU 内部寄存器中而不是通过内存寻址访问以提高效率。注意是尽可能,不是绝对。你想想,一个CPU 的寄存器也就那么几个或几十个,你要是定义了很多很多register 变量,它累死也可能不能全部把这些变量放入寄存器吧,轮也可能轮不到你。

一、皇帝身边的小太监----寄存器

不知道什么是寄存器?那见过太监没有?没有?其实我也没有。没见过不要紧,见过就麻烦大了。^_^,大家都看过古装戏,那些皇帝们要阅读奏章的时候,大臣总是先将奏章交给皇帝旁边的小太监,小太监呢再交给皇帝同志处理。这个小太监只是个中转站,并无别的功能。
好,那我们再联想到我们的CPU。CPU 不就是我们的皇帝同志么?大臣就相当于我们的内存,数据从他这拿出来。那小太监就是我们的寄存器了(这里先不考虑CPU 的高速缓存区)。数据从内存里拿出来先放到寄存器,然后CPU 再从寄存器里读取数据来处理,处理完后同样把数据通过寄存器存放到内存里,CPU 不直接和内存打交道。这里要说明的一点是:小太监是主动的从大臣手里接过奏章,然后主动的交给皇帝同志,但寄存器没这么自觉,它从不主动干什么事。一个皇帝可能有好些小太监,那么一个CPU 也可以有很多寄存器,不同型号的CPU 拥有寄存器的数量不一样。
为啥要这么麻烦啊?速度!就是因为速度。寄存器其实就是一块一块小的存储空间,只不过其存取速度要比内存快得多。进水楼台先得月嘛,它离CPU 很近,CPU 一伸手就拿到数据了,比在那么大的一块内存里去寻找某个地址上的数据是不是快多了?那有人问既然它速度那么快,那我们的内存硬盘都改成寄存器得了呗。我要说的是:你真有钱!

二、使用register 修饰符的注意点

虽然寄存器的速度非常快,但是使用register 修饰符也有些限制的:register 变量必须是能被CPU 寄存器所接受的类型。意味着register 变量必须是一个单个的值,并且其长度应小于或等于整型的长度。而且register 变量可能不存放在内存中,所以不能用取址运算符“&”来获取register 变量的地址。

C语static关键字—言最名不符实的关键字

不要误以为关键字static 很安静,其实它一点也不安静。这个关键字在C 语言里主要有两个作用。

一、修饰变量

第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。
静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用extern 声明也没法使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些代码行也不能使用它。想要使用就得在前面再加extern ***。恶心吧?要想不恶心,很简单,直接在文件顶端定义不就得了。
静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他函数也用不了。由于被static 修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。
static int j;
void fun1(void)
{
   static int i = 0;
   i ++;
}
void fun2(void)
{
   j = 0;
   j++;
}
intmain()
{
   for(k=0; k<10; k++)
   {
      fun1();
      fun2();
   }
   return 0;
}
i 和j 的值分别是什么,为什么?

二、修饰函数

第二个作用:修饰函数。函数前加static 使得函数成为静态函数。
但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
关键字static 有着不寻常的历史。起初,在C 中引入关键字static 是为了表示退出一个块后仍然存在的局部变量。随后,static 在C 中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static 关键字来表示这第二种含义。

总结:

今天讲的register的含义是寄存器的类型,是我们存储类型中的一个。而static也是存储类型中的一个,他属于静态类型,其实并不安静。今天就到这里,明天继续。

文章由源世界编辑,不得私自修改侵权发表,转载请联系作者!

欢迎订阅点赞,谢谢!

关注我们:源世界Z

关注公众号每天收听我们的消息,源世界为您奉上精品文章。

相关文章

  • C语言和C++的区别到底有多少?不要再傻傻分不清楚了

    1、关键字 蓝色标注为C语言关键字,C++继承了C语言的所有关键字,以下红色标注为C++中含有但C语言没有的关键字...

  • C语言学习:C语言关键字(二)

    正文共:1853字1图。预计阅读时间:5分钟 主要内容:C语言关键字详解 C语言register关键字—最快的关键...

  • 从菜鸟到大神——如何快速掌握C语言

    C语言关键字是嵌入式C语言必须掌握的利器,C语言中有很多的关键字,有register,static,const,e...

  • 第三章 C语言关键字

    了解C语言的关键字有哪些; 一、C语言的标准关键字 标准C语言共有32个关键字,9种控制语句,程序书写形式自由,区...

  • c语言关键字

    c语言关键字 关键字就是已被C语言本身使用,不能作其它用途使用的字。例如关键字不能作变量名、函数名等。c语言关键字...

  • 关键字

    C语言关键字

  • C语言复习

    # C语言概述 # C语言的数据表示 ## C语言的数据类型 ### C语言的字符集、标识符、关键字 1、字符集字...

  • C语言关键字

    C语言关键字 一、是什么? 关键字就是C语言提供的有特殊含义的符号,也叫"保留字",C语言中有32个 auto d...

  • 面向对象基本语法

    OC完全兼容C(.m)语言,可以在oc语言中混入c(.c)语言代码甚至是c++(.mm)代码。 oc关键字:基本上...

  • 2.头文件与类的声明

    C语言和C++语言中 函数与数据使用方法的不同 C语言中由于C语言中没有某些关键字,所以数据可以被全部函数所使用 ...

网友评论

    本文标题:C语言学习:C语言关键字(二)

    本文链接:https://www.haomeiwen.com/subject/ltnbjftx.html