您的位置:首页 > 其它

C基础补漏--04存储类关键字static

2019-03-01 10:04 113 查看

来源:
https://blog.csdn.net/chengxuyuan997/article/details/80839061
https://blog.csdn.net/kkwant/article/details/80952162

三个地方存储变量:普通内存(static、全局、代码段外)、运行时堆栈(auto、缺省、自动、代码内部)、硬件寄存器(register)
static :修饰局部变量时,该变量存放在静态存储区,生命周期是整个程序结束
auto:缺省的存储类型是 auto(自动)变量,普通局部变量,存储在栈上,当函数结束时,随之释放
register:寄存器变量,存放在寄存器里面,调用速度快 ,但c语言中register变量不能取地址,会报错 c++中,C++编译器发现程序中取register变量的地址时,register对变量的声明无效

存储类型
作用域
链接属性

static特点

1)static局部变量的“记忆性”和生存期的全局性
static 记忆性:局部变量初次定义时要初始化,且只能初始化一次。如果在定义时不初始化,编译器会自动赋值为0,重复调用函数时,只会执行第一次初始化,返回第一次调用退出时的值
===》破坏了程序的可重复性,但增强了记录性


**static生产期的全局性和唯一性:**普通local(局部)变量存储空间分配在stack上,因此每次调用函数时分配的空间都可能不太一样,而static具有全局唯一性,每次调用时都指向同一块内存,这就造成了不可重入性

当函数或(内部/)局部变量加上static时,不是为了限制其存储方式,而是为了限制该全局变量或者函数的作用域仅限于本文件==>内部函数 。
外部(全局)变量,无论有无static,存储区域都是静态存储区,生存其都是全局,但static可以限定作用域在本模块(文)内部 (好处:不同的人编写不同的函数时,不用担心自己定义的函数,是否与其他文件同名)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: