c语言基础----关键字使用

c语言常用关键字:static ,extern const valitile restrict
变量有三个属性:存储周期(生命周期),作用域,链接(外部声明)。
static
使用范围:变量 函数
效果1:在变量定义前加上static关键字可以改变一个变量的存储周期和链接属性。比如,定义一个没有带static的局部变量,局部变量在函数执行完后,局部变量的内存空间就被释放。如果定义的时候加上staic,那么变量就存储在静态区域。直到程序执行完成空间才被释放,所以,static关键字改变了一个变量的存储周期。又比如,定义一个没有带staic的全局变量,那么这个变量可以被链接到另一个文件中使用,使用前进行extern即可。如果加上staic关键字,那么这个变量就不能被链接。
效果2:在函数前加上static和全局变量一样的效果,该函数不能向外链接。

extern
作用:引用式声明。
作用范围:变量 函数
效果:声明变量和函数, 告诉编译器变量或者函数的定义在另一个地方。
const
作用:指定某个变量的值时不能被改变的。
作用范围:变量
效果:不同的变量有不同的用法。
常用变量(char int float)和数组:
const char a = 0;//a不能再重新赋值
const char a[6]={0}; //数组的六个元素不能再重新赋值
const 和指针变量组合有两种可能,第一种,指针指向的变量的值不能再被更改。
第二种,指针不能再重新指向另一个变量。
const char * a; //a指向不能改变的值,也就是a指向了const char 的一个变量。
char * const a;//a的值不能改变,也就是a不能再重新指向另一个地址。
const char *const a;//a指向了不能改变的值,a的值不能再改变。

valitile:
作用:声明一个变量有可能通过其他方式进行修改,告诉编译器不要进行优化。
作用范围:变量
效果:
char x = 1;
char *a = &x;
val1 = x;
a = 2;
val2 = x;
如上语句。执行val1 = x,时,cpu会从内存加载x的值到某个寄存器中,然后赋值给val1,这个时候val1 = 1;然后执行
a = 2,那么这个时候x = 2。最后执行到val2 = x,因为cpu的寄存器中存有x的值,由于cpu没有看到有指令修改了x的值(也就是x = 2这种指令),那么默认x的值是不变的,为了优化加快执行速度,没有重新从内存读取x的值。而是拿寄存器中x的值赋值给val2。那么这个时候val2的值为1。
restrict
作用:和valitile相反。声明一个变量不会有其他方式修改变量。告诉编译可以优化。
char restrict a;
如上,a这个变量内存空间的值只能通过a进行修改。没有其他方式可以修改,告诉编译器可以优化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值