快速了解关键字static

本文详细介绍了C语言中static关键字的三种主要用途:修饰局部变量使它在函数调用间保持状态;修饰全局变量使其具有内部链接属性,不能被其他源文件引用;修饰函数使其成为内部函数,限制其作用域。通过实例代码展示了static如何改变变量和函数的生命周期及作用域。
摘要由CSDN通过智能技术生成

C语言中,static关键字有多种作用,经常弄的人头晕,今天我们就来看一下,static的作用。

目录

static修饰局部变量

 static修饰全局变量

static修饰函数


static修饰局部变量

void test();

int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}
	system("pause");
	return 0;
}

void test()
{
	int a = 0;
	a++;
	printf("%d  ", a);
}

上面的代码是 调用test函数打印变量a的情况,从结果可以看到,test函数每调用一次,a就会被重新赋值,所以打印了十个1。

void test();

int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}
	system("pause");
	return 0;
}

void test()
{
	static int a = 0;
	a++;
	printf("%d  ", a);
}

 

再用static修饰了a以后,输出结果变为1到10,这是因为static改变了变量a的生命周期,变量是存放在内存的栈区中(生命周期随着所处代码块的结束就结束了),修饰过后变量被转移到静态区(生命周期变为了整个工程) 

上图说明static修饰后,每一次运行test函数时,都没有创建变量a。

 static修饰全局变量

 我们先了解下全局变量的作用域和范围

 第一张图的代码,引用了下面这张图的全局变量,这里可以看到全局变量的作用域在整个工程,不会被源文件所限制。

这里, 用static修饰变量!!!

 

 编译器给出(1    error LNK2001: 无法解析的外部符号 _a ) 

这是全局变量本身具有的外部链接属性,被static修饰后,变为了内部链接属性,无法被别的源文件引用。

static修饰函数

上图之前,我们先了解下函数也具有连接属性,也分为内部和外部

这是在2号源文件定义的函数

1号源文件这里,经过extern的引用

 输出的结果是30。

 经过static修饰后

 

程序不出意外的报错了,结果和全局变量类似,_add是外部符号,无法被引用。

所以,static修饰函数时,也是将函数的外部链接属性,变为内部,相当于改变了函数的作用域。

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值