C语言static关键字用法详解

static大概是C语言关键词里最麻烦的一个,麻烦之处在于它有着两种完全不相干的用法,很容易让人一头雾水,我们一起来分析一下它的两种用法。

一、修饰局部变量形成静态局部变量

1.静态变量听起来很矛盾,让人摸不清头脑,像是一个不可变的变量,但实际上,“静态”指的是变量的位置是固定不变的,具有静态存储时期。静态局部变量和普通变量具有相同的代码块作用域,但它们的值不会消失,每一次调用函数,编译器都记录着他们的值。原因在于普通局部变量存储于进程栈空间,使用完毕会立即释放,而静态局部变量和全局变量的值分配在数据段(或bss段)上,具有全局生命周期。

2.静态局部变量和全局变量都具有静态存储时期,生命周期一样。他们的区别体现在作用域和连接属性上,静态局部变量作用域是代码块作用域、链接属性是无连接;全局变量作用域是文件作用域、链接属性方面是外连接。

#include<stdio.h>

void func();
void static_func();
int main()
{
	func();
	func();
	static_func();
	static_func();
	
	return 0;
}
void func()
{
	int n = 6;
	printf("n = %d\n", n);
	printf("++n = %d\n", ++n);
}
void static_func()
{
	static int m = 6;
	printf("m = %d\n", m);
	printf("++m = %d\n", ++m);
}


运行结果为:

n = 6
++n = 7
n = 6
++n = 7
m = 6
++m = 7
m = 7
++m = 8

二、修饰全局变量、函数

static修饰全局变量和函数是为了解决重命名的问题,当一个工程项目比较庞大,参与人数较多时,定义函数和全局变量也变得很困难,很容易出现名字相同的全局变量和函数名,为了解决这一问题,便使用static关键字,用来表示这个函数或者全局变量具有内部链接属性,只在当前文件内使用。

总结:经分析可知,static的两种用法是完全独立的,本可以再引入一个关键字来解决,不过两种用法并不难区分。掌握了简单的用法之后,可以从作用域、连接属性和生命周期方面考虑,更能加加深对static关键字的理解。

 

参考资料:(1)《C Primer Plus》(第五版)

(2)朱友鹏老师C语言高级专题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值