浅谈C语言static关键字 静态变量 函数

static对变量修饰

局部变量

普通局部变量存储于进程栈空间,使用完毕会立即释放。
静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。

普通局部变量未赋值时,打印出来的是变量对应内存中以前的数据,(因为内存中的数据不能删除,只能覆盖,给变量赋值的过程就是覆盖数据的过程),而静态局部变量(用static修饰的变量,例如:static int i;)在声明时编译器会自动给他赋值0。
不管是普通局部变量还是静态局部变量,作用域皆为局部作用域,都随着声明函数的结束而结束。
下面放一段代码感受普通局部变量和静态局部变量的区别。

void fun_static()
{
    
    
	static int i;
	printf("%d\n",i);
	i++;
}

void fun()
{
    
    
    int c;
	printf("%d\n",c);
	c++;
}

int main ()
{
    
    
	fun_static();
	fun();
	printf("-------------\n");
	fun_static();
	fun();
	printf("-------------\n");
	fun_static();
	fun();
	printf("-------------\n");
	
	return 0;
}

运行结果为:

0
0
-------------
1
0
-------------
2
0
-------------

因为普通变量会随着函数的结束而被释放,所以每次调用函数都是新声明一次,而静态局部变量不会随着函数的结束而改变值。

全局变量

一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,
不能在其他源文件内使用。

函数

一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用,且在不同文件中可以重名定义。普通函数不能重名定义,可以在其他文件中被引用,且不能在其他文件中重名定义。

猜你喜欢

转载自blog.csdn.net/qq_46209845/article/details/110919535