关键字static

关键字static

文章目录

  • 关键字static
    • 1.修饰局部变量
    • 2.修饰全局变量
    • 3 .修饰函数

在C语言中:
static是用来修饰变量和函数的,static可以修饰局部变量,全局变量以及修饰函数

1.修饰局部变量

// 示例1.1
#include 
void test()
{
	int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
	int i = 0;
	for(i=0; i<10; i++)
	{
		test();
	}
	return 0;
}

运行结果:

1 1 1 1 1 1 1 1 1 1

// 示例1.2
#include 
void test()
{
	//static修饰局部变量
	static int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
    int i = 0;
	for(i=0; i<10; i++)
	{
		test();
	}
	return 0;
}

运行结果:

1 2 3 4 5 6 7 8 9 10

对比示例1.1和示例1.2的运行结果可以推断出static修饰局部变量的意义。

static修饰局部变量时,改变了变量的储存类型,普通的局部变量是储存在栈区,被static修饰的变量是存储在静态区的。

存储在静态区的变量,出了作用域不会销毁,依然存在。

所以静态变量的生命周期就是程序的生命周期,程序结束的时候,静态变量才回收空间。

结论:

static修饰局部变量改变了变量的生命周期
让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束

2.修饰全局变量

//示例2.1
//add.c
int g_val = 2018;
//test.c
int main()
{
	printf("%d\n", g_val);
	return 0;
}
//示例2.2
//add.c
static int g_val = 2018;
//test.c
int main()
{
	printf("%d\n", g_val);
	return 0;
}

示例2.1正常,示例2.2在编译的时候会出现连接性错误 。

结论:

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

3 .修饰函数

//示例3.1
//add.c
int Add(int x, int y)
{
	return x+y;
}
//test.c
int main()
{
	printf("%d\n", Add(2, 3));
	return 0;
}
//示例3.2
//add.c
static int Add(int x, int y)
{
return x+y;
}
//test.c
int main()
{
	printf("%d\n", Add(2, 3));
	return 0;
}

示例3.1正常,示例3.2在编译的时候会出现连接性错误。

结论:

一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

你可能感兴趣的:(c++,开发语言,c语言)