c语言static三种用法

文章目录


前言

本文章简要介绍c语言中static的三种用法


一、修饰局部变量

在主函数中即 int main()中创建变量时,在前面加上static,就使用了static修饰局部变量。

局部变量具有的特点:在程序进入作用域内创建(开辟一块新的内存空间),在程序离开作用域后销毁(删除内存空间),可以在VS编译器中查看:

如图一个简单的for循环中,一个循环就是局部变量a的一个生命周期,按F11后,按如下步骤

调试—>窗口—>监视,打开监视窗口

 如图输入监视内容:  a —>对应a的值    &a—>对应a的地址

再次按 F11逐条运行程序,发现每次循环&a对应的值,也就是a的存放地址都改变了。

而在static修饰了之后,重复上述步骤,将发现&a的值不再改变。

其实static将局部变量默认的存放路径栈区,变为静态区,使得变量的作用域变得和程序的一样长,程序销毁才会销毁,并且值得一提的是,static int a=1;这一条语句在整个程序中只会执行一次,我们在循环后面加两条语句来测试一下:

每条循环语句中都有static int a=10; 但是并没有每次都将a初始化为10,其实正是因为a的地址一直存在,而且程序只会执行一次此语句,不会再进行删除和开辟新内存的操作。

所以static修饰局部变量具有延长局部变量生命周期的作用。

 二、static修饰全局变量

在主函数int main()外部定义的变量称为全局变量,在主函数外加一句 extern int a;就可以使用同一个工程,不同源文件的全局变量。而使用static修饰的全局变量,将使得本条属性丢失。

如图未使用static时程序完美运行。

而加上static后报错:

 报错内容为无法解析外部符号a,即不能再使用,另一个源文件的全局变量。

原理其实很简单,全局变量拥有外部链接属性,即为能被另一个源文件引用的原因,但是static将局部变量的外部链接属性变为内部链接属性,不再具有被其他源文件引用的属性。

注:意义在于:

1.避免不同源文件中对变量重命名

2.防止其他源文件随意修改参数,保证一定安全性。


三、修饰函数

与全局变量类似,可以用extern声明其他源文件的函数:

而在static修饰函数之后,同样出现报错 

报错内容为未识别Add,和全局变量未识别非常类似。原理也同上,原本函数具有外部链接属性,static修饰之后变为内部链接属性。

 

总结

1.static修饰局部变量,延长了变量的生命周期,并且变量的地址将一直存在并保持不变。

2.static修饰全局变量,使得其他源文件不能引用此全局变量。

3.static修饰函数,使得其他源文件不能引用此函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值