属性关键字 auto,register,static分析

属性关键字

C语言中的变量可以有自己的属性
在定义变量的时候可以加上“属性”关键字
属性关键字指明变量的特有意义

auto关键字

auto为C语言中局部变量的默认属性,可以不写出来。表明变量是在上分配空间的。
编译器默认所有的局部变量都是auto的

注意: 全局变量是在程序静态区分配空间的,不能使用auto关键字来修饰全局变量。全局变量不能在栈上分配空间。

static关键字

static关键字指明变量的“静态”属性
static关键同时具有“作用域限定符”的意义
static修饰的局部变量存储在程序静态区,生命是程序的运行期。

注意:static不是const,static修饰的变量本质上仍然是变量,可以再被赋值和改变,static是让变量的作用域变为全局。而const修饰的是常量,注意static不要与const混淆。

static的另一个意义是文件作用域标示符用static表示的变量和函数只作用在定义该变量或函数的文件中,其他文件不能用extern访问该变量。
static修饰的全局变量作用域只是声明的文件中
static修饰的函数作用域只是声明的文件中

static修饰的函数与普通函数的区别:
  用static修饰的函数,作用域限定在本源码文件中,不能被本源码文件以外的代码文件调用,其他文件中可以定义相同名字的函数,不会发生冲突。而普通的函数,默认是extern的,可以被其它代码文件调用该函数。

register关键字

register关键字指明将变量存储于寄存器
register只是请求寄存器变量,但不一定请求成功,因为寄存器的数量有限。

从寄存器中取值会比从内存中取值快的多,因此register关键字用在对实时性要求非常高的场合。

register变量的长度必须是CPU寄存器可以接受的值
不能用&运算符获取register变量的地址,因为寄存器没有地址

注意:全局变量的生命是程序的运行期,因此不能用register关键字修饰全局变量,否则寄存器会被一直占用,寄存器无法使用。

小结:

auto变量存储在程序的栈中,是默认属性
static变量存储在程序静态区中
register变量请求存储于CPU寄存器中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值