知道这些关键字在c语言中存在的地位吗(在c语言中关键字基本上都是什么字母)
导语:知道这些关键字在C语言中存在的地位吗?
最宽宏大量的关键字 -- autoauto:它很宽宏大量,你可以当它存在,也可以当它不存在。编译器在默认的缺省情况下,所有变量都是auto的。
int fun(){
int a = 10; // auto int a = 10;
// do something
return 0;
}
最快的关键字 -- registerregister:关键字请求编译器尽可能的将变量存放在内部寄存器CPU中,而不是通过内部寄存器寻址来提高效率,请注意这不是绝对的。CPU的寄存器个数有限(几个或者几十个),要是定义了很多很多register变量,它累死也不可能把全部变量放到寄存器中吧,轮也轮不到你吧。
1)皇帝身边的太监 -- register
古装戏中的太监有什么作用?无疑是宣读圣旨或者是传旨的作用,大臣把奏折交给太监,太监再交给皇帝,相当于一个中转站,并无其他功能。
那与CPU有什么联系呢?CPU相当于老大,就是皇帝,内存相当于大臣,数据从他那里拿出来,寄存器就是太监,那显而易见,我们就知道了寄存器的作用了,数据从内存中取出放到寄存器中,然后CPU从寄存器中读取数据来处理,处理完后,再通过寄存器存放到内存中,CPU不直接和内存打交道。寄存器其实就是一块一块的存储空间,只不过存取速度比内存快得多。
2)使用register修饰时注意
虽然寄存器的速度快,但使用register修饰符也有些限制,register变量必须是被CPU寄存器所接受的类型,意味着register变量必须是一个单个的值,其长度必须小于或者等于整型的长度,并且register变量可能不存在内存中,不能用取址运算符“&”来获取register变量的地址。
总结
1、register变量必须是能被CPU寄存器所接受的类型,这通常意味着register变量必须是一个单个的值,并且其长度应小于或等于整型的长度。但是,有些机器的寄存器也能存放浮点数。
2、register变量可能不存放在内存中,所以不能用取址符运算符“ & ”。
3、只有局部变量和形参可以作为register变量,全局变量不行。
4、静态变量不能定义为register。 register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。
本文内容由小舻整理编辑!