在C语言中 static的存储类型

static存储类型可以用于全部变量,而无须考虑变量声明的位置。但是,作用于块外部声明的变量和块内部声明的变量时会有不同的效果。

🌵当用在块外部时,static说明变量的名字具有内部链接

🌵当用在块内部时,static把变量的存储期从自动的变成了静态的

 给大家举例说明一下:

在用于块外部的声明时,🍧static本质上使变量只在声明它的文件内可见只有出现在同一文件中的函数可以看到此变量。再给大家 举个例子,函数f1和函数f2都可以访问变量i,但是其他文件中的函数不可以:

 static的此类用法可以用来实现一种称为信息隐藏的技术。

块内声明的static变量在程序执行期间驻留在同一存储单元内。和每次程序离开所在块就会丢失值的自动变量不同,static变量就会无限期地保留值。static变量具有以下一些有趣的性质。

  • 🧃块内的static变量只在程序执行前进行一次初始化,auto变量则会在每次出现时进行初始化(当然,需要假设它有初始化器)。
  • 🧃每次函数被递归调用时,它都会获得一组新的auto变量但是,如果函数含有static变量,那么此函数的全部调用都可以共享这个static变量。
  • 🧃虽然函数不应该返回指向auto变量的指针,但是函数返回指向static变量的指针是没有错误的。

声明函数中的一个变量为static,这样做允许函数在“隐藏”区域内的调用之间保留信息。隐藏区域是程序其他部分无法访问到的地方。然而,更通常的做法是用static来使程序更加有效。思考下列函数:

 每次调用digit_to_hex_char函数时,都会把字符0123456789ABCDEF复制给数组hex_chars来对其进行初始化。现在,把数组设为static的:

由于static型变量只进行一次初始化,这样做就提升了digit_to_hex_char函数的速度。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安心学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值