关于C中static用法

目录

前言

一、修饰变量

1.修饰局部变量

2.修饰全局变量

二、修饰函数

总结


前言

static英文含义静态的,静止的。static可以修饰变量和函数。


一、修饰变量

1.修饰局部变量

void Addself()
{
	int tmp = 0;
	tmp += 1;
	printf("%d", tmp);
}
int main()
{
	for (int i = 1; i <= 3; i++)
	{
		Addself();
	}
}

输出结果为111

那么我们给临时变量加上static后再来看一下结果

void Addself()
{
	static int tmp = 0;
	tmp += 1;
	printf("%d", tmp);
}
int main()
{
	for (int i = 1; i <= 3; i++)
	{
		Addself();
	}
}

结果为123

临时变量在函数结束时本应该自动销毁,但上述情况来看,在我们加上static后,它没有被销毁,反而作为下一次继续使用,顾名思义,改变了他的生命周期。

注:static 修饰局部变量的时候,其实改变的是局部变量的存储位置,原来的局部变量放在栈区,静态的局部变量是放在静态区,放在静态区的变量出了作用域是不会销毁的,相当于生命周期延长了。

当然关于静态地址空间,我们现在简单了解就可,它分为栈区,堆区以及静态区。

1.我们的局部变量和形参以及所有的函数都放在栈区;

2.堆区存放的是动态开辟的内存;

3.静态区存放的就是全局变量,或者static修饰的变量

2.修饰全局变量

我们知道全局变量的作用域是整个工程,辩证法可知我们要想看到区别需放在不同的文件里

int num=2022;//创建全局变量

extern num;//extern引用全局变量
	int main()
	{
		printf("%d", num);
		return 0;
	}

输出结果为2022

当我们用static修饰后

static int num=2022;

我们发现编译器报错(一个无法解析的外部命令),也就是说全局变量的外部链接属性变成了内部链接属性,其他源文件无法使用了

二、修饰函数

修饰函数与修饰全局变量的作用是相同的,同样的只能在本文件内使用,不能共享于工程内其它源文件


总结

1. 在修饰局部变量时, static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。Static修饰的局部变量存放在全局数据区的静态变量区。
2. static修饰全局变量的时,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。
3. static修饰一个函数,则这个函数的也只能在本文件中调用,不能被其他文件调用。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言static关键字可以用于以下几个方面: 1. 声明静态变量 使用static关键字声明的变量被称为静态变量,与普通变量不同的是,静态变量在程序运行期间只会被初始化一次,而且只能在定义它的函数或文件访问,不能被其他文件访问。 示例代码: ``` void func() { static int count = 0; count++; printf("count = %d\n", count); } int main() { func(); // count = 1 func(); // count = 2 func(); // count = 3 return 0; } ``` 2. 声明静态函数 使用static关键字声明的函数被称为静态函数,与普通函数不同的是,静态函数只能在定义它的文件访问,不能被其他文件访问。 示例代码: ``` static void func() { printf("this is a static function\n"); } int main() { func(); // this is a static function return 0; } ``` 3. 声明静态全局变量文件作用域内使用static关键字声明的变量被称为静态全局变量,与普通全局变量不同的是,静态全局变量只能在定义它的文件访问,不能被其他文件访问。 示例代码: ``` static int count = 0; void func() { count++; printf("count = %d\n", count); } int main() { func(); // count = 1 func(); // count = 2 func(); // count = 3 return 0; } ``` 4. 声明静态类成员 在C++,使用static关键字可以声明静态类成员,与普通类成员不同的是,静态类成员不属于类对象,而是属于整个类,只有一个副本,可以在不创建对象的情况下访问。 示例代码: ``` class MyClass { public: static int count; }; int MyClass::count = 0; int main() { MyClass::count++; printf("count = %d\n", MyClass::count); return 0; } ``` 所以,在C语言static关键字的用法主要是用于声明静态变量、静态函数、静态全局变量等,可以用于限制变量或函数的作用域,或者用于记忆化计算等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值