c语言register变量可重入吗,static在C语言中主要是两种用法

static在C语言中主要是两种用法c++

一、修饰局部变量函数

二、修饰函数和全局变量spa

局部变量按照存储形式来分,分为auto,static,registercode

首先从内存四区的角度去看,auto即为普通的局部变量,存储在栈上,当函数结束时,随之释放。生命周期

register为寄存器变量,存放在寄存器里面,调用速度快。内存

在C语言中register变量不能取地址,会报错。作用域

而在c++中,对register作了加强,党C++编译器发现程序中须要取register变量的地址时,register对变量的声明变得无效。编译器

static修饰局部变量时该变量是存放在静态存储区,生命周期是整个程序结束。编译

static局部变量初次定义时就要初始化,且只能初始化一次。若是在定义的时候不初始化,编译器就会自动赋值为0;(也就是说若是重复调用同一个函数,在第二次调用时,就不会再执行static局部变量初始化那句话 了)class

特色: static局部变量的”记忆性”与生存期的”全局性”

所谓”记忆性”是指在两次函数调用时, 在第二次调用进入时, 能保持第一次调用退出时的值.

voidstaticLocalVar()

{

staticinta=0;// 运行期时初始化一次, 下次再调用时, 不进行初始化工做

printf(“%d”,a);

a++;

}

intmain()

{

staticLocalVar();// 第一次调用, 输出a=0

staticLocalVar();// 第二次调用, 记忆了第一次退出时的值, 输出a=1

return0;

}

注意事项:

1. “记忆性”, 程序运行很重要的一点就是可重复性, 而static变量的”记忆性”破坏了这种可重复性, 形成不一样时刻至运行的结果可能不一样.

2. “生存期”全局性和惟一性. 普通的local变量的存储空间分配在stack上, 所以每次调用函数时, 分配的空间均可能不同, 而static具备全局惟一性的特色, 每次调用时, 都指向同一块内存, 这就形成一个很重要的问题 ---- 不可重入性

2、

当static修饰全局变量或者函数时,不是为了限制其存储方式,而主要是为了限制该全局变量或者函数的做用域仅限于本文件,因此又称为内部函数。此件时, 对于外部(全局)变量, 不管是否有static限制, 它的存储区域都是在静态存储区, 生存期都是全局的. 此时的static只是起做用域限制做用,限定做用域在本模块(文)内部.

使用内部函数的好处是:不一样的人编写不一样的函数时,不用担忧本身定义的函数,是否会与其它文件中的函数同名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值