c语言总结:static关键字的用法与const*与*const的区别

在c语言中,static是用来修饰变量与函数的,主要分为:

  • 修饰局部变量
    static修饰的局部变量只执行一次,延长了局部变量的生命周期,让静态局部变量出了作用域依然存在,直到程序运行结束后才被释放。
    例如:代码1
void test()
{
	int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
	for (int i = 0; i < 10; i++)
	{
		test();
	}
	return 0;
}

它的结果为1 1 1 1 1 1 1 1 1 1,因为函数被调用一次,i销毁重建,但是如果加上static关键字,例如代码2

void test()
{
	static int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
	for (int i = 0; i < 10; i++)
	{
		test();
	}
	system("pause");
	return 0;
}

它的结果为1 2 3 4 5 6 7 8 9 10,因为加上了static关键字,i成为一个静态变量,不会销毁

  • 修饰全局变量
    static修饰全局变量时,此全局变量只能在本文件内使用,不能在其他文件中访问,即使是extern外部声明也无用
    例如:
add.c
int val = 2019;
test.c
int main()
{
	extern int val;
	printf("%d\n", val);
	return 0;
}

它的结果为2019,因为使用了extern外部声明,不会出现连接错误
但是如果加上static关键字,例如

add.c
static int val = 2019;
test.c
int main()
{
	extern int val;
	printf("%d\n", val);
	return 0;
}

代码出现错误,无法运行。

  • 修饰函数
    static修饰函数,这个函数只能在此源文件中调用,不能被其他源文件调用,道理与修饰全局变量相同。
    总结:static修饰的局部变量存放在全局数据区的静态变量区,自动初始化为0.

constconst

例如:int const*a,可以看成int const(*a),const修饰a所指向的值,即值不能变,a所保存的地址可以变,而 int *const a可以看成 int *(const a),const修饰a所保存的地址,即地址不能变,而a所指的值可以变。

你可能感兴趣的:(#,C语言)