static 关键字

1.隐藏
全局变量与函数可被外部文件访问,但加了static关键字后该全局变量或函数只能被本文件中被访问。
2.保持变量内容
在函数中声明变量时加static关键字,该变量将被储存在静态储存区,该变量不随函数的释放而销毁。
3.默认初始化为 0
静态储存区所有字节默认储存值为0,因此加了static关键字的变量默认为0(全局变量同理)

2.const关键字
值不可修改:一旦常量被赋值后,其值将保持不变,不能再对其进行修改。
(但实际上该常量可被指针修改,因此指向常量的指针应使用常量指针
例:
const int a=10;
const int*p=&a;)
编译时确定:常量的值在编译时就已确定,并在运行时保持不变。
(如果将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义。
extend const int ValueName = value;)
const修饰指针:
int *const p=&a;(指针指向的地址不可修改,即不可再对p进行p=&b,p++,p--等改变p指向地址的操作)
const int p=&a;(指针指向的地址所存变量不可修改,但实际上是p=n操作不可执行,可以用a=n等语句跳过指针直接操做指向的内容)
int const *p=&a;(同const int *p=&a)

const修饰函数形参:
void function(const int Var);(无意义)
void function(char* const Var);(无意义)
void function(const char* Var);(不可通过该函数修改指针指向的值,保证了数据的安全性)

3.volatile关键字
volatile声明的变量是指可能会被意想不到地改变的变量,这样编译器就不会轻易优化该变量。它主要用于多线程编程中,用来保证共享变量的内存可见性。(注:指针也可用volatile)
遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问,使用 volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据。
三个常见场景:
多线程中的共享变量
中断程序中访问到的非自动变量
并行设备的硬件寄存器

4.register关键字
register 只能修饰局部变量,其作用是尽量将所修饰的局部变量,放入CPU寄存器中,从而提高它的读取效率。
在使用寄存器变量时,请注意:
(1)待声明为寄存器变量的类型应该是CPU寄存器所能接受的类型,寄存器变量是单个变量,变量长度应该小于等于寄存器长度。
(2)不能对寄存器变量使用取地址符“&”,因为该变量没有内存地址。
(3)尽量在大量、频繁操作时使用寄存器变量,且声明的变量个数应该尽量少。
(4)被高频被读取且不会写入

参考:
https://blog.csdn.net/weixin_44049823/article/details/128735316?fromshare=blogdetail&sharetype=blogdetail&sharerId=128735316&sharerefer=PC&sharesource=qq_44024247&sharefrom=from_link
https://blog.csdn.net/LSZ520LSZ/article/details/121273959

posted @   Osen  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示