【C语言】-9.1彻底了解static

static- 静态 关键字

用三种法:可以修饰局部变量,全局变量,还可以修饰函数

void test()//test()函数执行完后要返回一点东西 ,此处的test函数不需要任何返回,则此时返回类型写void(不需要任何返回)
{
	int a = 1;//每次进入test函数变量a就会被重新定义 值为1
	a++;
	printf("%d\n",a);
}
int main()
{
	int i = 0;
	while(i<10)//循环10次
	{
		test();//test函数
		i++;
	}
	return 0;
}

输出结果:2 2 2 2 2 2 2 2 2 2 (10个2)
原因:
每次进入test()函数中,就会创建局部变量a
每次循环a都会被重新定义一次

1. 修饰局部变量

当在局部变量a前面加上static修饰

结果如下:2 3 4 5 6 7 8 9 10 11
在这里插入图片描述
static 修饰局部变量的时候,局部变量出了作用域,不销毁
本质上static修饰局部变量的时候,改变了变量的存储位置

变量的存储位置:根据不同的类型分在内存不同的区域中
在这里插入图片描述
a原来为局部变量,在栈区中被存储
被static修饰后存储位置由栈区变成静态区
变量类型由局部变量,变成了静态变量

实际上:影响了变量的生命周期,生命周期变长,和程序的生命周期一样长

2. 修饰全局变量

什么是全局变量?

答:写在函数外的变量(在大括号外的变量)

int q_a = 2022 // q_a就是全局变量
int main()
{
	...
	return 0;
}

全局变量具有外部链接属性(编译+链接–> 可执行程序)
eg:全局变量可以被定义在另一个文件中

在这里插入图片描述
extern:用extern修饰变量是修饰外部变量

当我们在全局变量前面加上static修饰时
文件无法运行,报错

当全局变量被static修饰后,全局变量的外部链接属性变成了内部链接属性,其他的源文件(.c)就不能在使用到这个全局变量了

3. 修饰函数

先举一个简单的求和函数的例子(计算两数和)

#include <stdio.h>

int Add(int x, int y)
{
	return (x + y);
}
int main()
{
	int a = 10;
	int b = 20;
	int z = Add(a, b);
	printf("%d\n", z);
	return 0;
}

在看另一种方式;

如果我们需要的函数,这个函数定义在其他源文件的,当我们想使用他的时候,我们要进行合理科学的声明(extern int Add(int x,int y);)
我们就能正常的使用

在这里插入图片描述

为什么能这么写呢

答:函数和全局变量相似,也具有外部链接属性

当函数被static修饰函数后

在这里插入图片描述

出现报错 ,文件无法成功链接

原因:一个函数本来具有外部链接属性,但是被static修饰的时候,外部链接属性就变成了内部链接属性,其他源文件(.c)就无法使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值