C 语言修饰变量的关键字 const 和 register

2023-05-30 0 670

C 语言修饰变量的关键字 const 和 register

C 词汇中的URL却是挺多的,比如说时常看的类别URL,如 int、char、float、struct、union、enum等;推论内部结构和循环式内部结构的URL,if、else、for、while之类;除了类型表述URL typedef。

第一集该文来和我们来如是说 const 和 register URL。这三个又叫作缩排,用以润色表达式的,让一般的表达式造成特定的象征意义。

1. const

const 意为自表达式,在C词汇中则表示为自表达式缩排

当三个表达式所带 const URL,所以那个表达式就成了三个自表达式。

自表达式是不容更动的表达式,即在一已经开始表述后,就不容以再间接修正了。且自表达式在表述的与此同时要是展开调用,不然是严重错误的。

比如,将三个表达式 a 透过 const 表述为自表达式,并给它调用三个值 1。前面想透过表达式操作符来修正自表达式 a 的值,就无法了。

C 语言修饰变量的关键字 const 和 register

所以,自表达式的值就一定无法修正吗?

也不一定,C 词汇中有三个二五仔,指针。你说不容能的事,我偏偏要是把它变成可能。

C 语言修饰变量的关键字 const 和 register

运行结果:自表达式a的值1 自表达式a的值99

需要注意的是,当将自表达式 a 的地址赋给指针表达式 pa 时,必须使用类别强转。因为在 C 词汇当中,认为 const 是更广泛的类别限制,优先级更高。

2. register

register 直译为注册、记录,在程序中则表示为寄存器表达式缩排。与此同时也是四种表达式存储类的其中三个。

它的作用是暗示编译器那个表达式有可能会被频繁地用到,建议把它放到寄存器里面,从而提高运行速率。

那什么是寄存器?寄存器是CPU中用以暂时存储数据的三个小型存储区域,和缓存、内存、硬盘一样都是用以存储数据的。

关于这四个的运行速度,互相之间的关系,有三个比喻我觉得有趣,但或许不所以恰当。

CPU 相当于是皇帝,寄存器相当于大内总管,缓存相当于大臣,内存相当于地方官员,硬盘相当于平民百姓。

平民百姓需要将紧急民情上达到地方官员。

地方官员整理成册,写成紧急奏折送到皇城里。

皇城里的大臣收到了地方官员的紧急奏折,再转交给大内总管,让他交给皇帝处理。

但有时候因为民情太严重了,地方官员就间接上交给大内总管,让大内总管间接交给皇帝。

C 语言修饰变量的关键字 const 和 register

由此能知道,寄存器的处理速度是最快,硬盘是最慢的。

使用寄存器需要注意以下内容:

2.1 寄存器表达式的类别应该是CPU所能接受的数据类别。

这就意味着,寄存器表达式必须是三个单个的值,并且长度应该小于或者等于整型的长度。因此,建议用 register 去润色如 short、char、int 等比较小的数据类别。

不过,现在有些机器的寄存器也是能存放浮点型的。

2.2 无法对寄存器表达式使用 &。

寄存器表达式,顾名思义是将表达式存放在寄存器当中,而不是内存。

因此无法对寄存器表达式使用寻址操作符(&),不然运行后会造成报错。

C 语言修饰变量的关键字 const 和 register

2.3 只有局部表达式和形参能作为寄存器表达式。

局部表达式和形参都有三个特性,那是生命周期短,完成相关内容后,就结束了他们的使命,这一点寄存器就非常的喜欢。

寄存器是 CPU 中一小块的存储区域,因此能说这里的空间都是寸土寸金。寄存器的存在是为了提高程序的运行效率,所以这里空间一般都是留给那些需要反复、频繁使用的数据。

如果是全局表达式这种与天(程序)同寿的家伙放到寄存器,所以寄存器的空间就相当于默认舍弃掉一部分,这对于寄存器而言,是无法容忍的。

2.4 局部静态表达式也无法作为寄存器表达式。

在 C 词汇当中,表达式的存储类别只能使用三个。因此 register 和 static 是无法放在一起共用的。

C 语言修饰变量的关键字 const 和 register
即便是能放在一起,register 也无法跟 static 一起共用。

这是因为 static 所润色的表达式,称之为静态表达式。

静态表达式的生命周期和全局表达式是一样,如果放在寄存器中,也是白白浪费了一块地方。

2.5 寄存器的数量是有限的的。

所以一些寄存器只接受特定类别的数据,比如说指针或者浮点型。如果过多地使用 register 来展开润色,编译器会自动将多余的 register 缩排展开忽略。

除了最后三个问题,register 润色的表达式就一定是存放在寄存器中的吗

不一定。

在过去,C 词汇编译器是不会将表达式存储在寄存器中, register 的出现是非常有价值的。

但如今,随着编译器越来越强,register 的作用是暗示和建议,请求尽可能地将声明的表达式放在寄存器中,并无法做出最终的拍板。

现在即便不使用 register 缩排,强大的编译器也会自动识别哪些表达式是需要放到寄存器当中。而有时候就算所带了 register 缩排,编译器也会自动忽略,把它看做是三个一般的表达式。

最后

以上是关于 C 词汇 const 和 register 缩排的如是说。

如果发现文中有什么严重错误之处,或者对文中有不理解的地方,欢迎在评论区留言。
举报/反馈

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务