C语言static关键字

导读:本篇文章讲解 C语言static关键字,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

局部变量使用static修饰

  • 局部变量被static修饰后,我们称为静态局部变量
  • 对应静态局部变量在声明时未赋初值,编译器也会把它初始化为0
  • 静态局部变量存储于进程的静态存储区(全局性质),只会被初始化一次,即使函数返回,它的值也会保持不变

C语言static关键字

void fn_static(void) { 
	static int n = 10; //静态局部变量, 放在静态存储区,全局性质空间
	printf("\nstatic n=%d\n", n); // 10
	n++; // n = 11
	printf("\nn++=%d\n", n); // 11
}
int main(void) {
	/*  fn();
	printf("--------------------\n");*/
	fn_static();
	printf("--------------------\n");
	/*   fn();
	printf("--------------------\n");*/

	fn_static();//只初始化一次,所以n++会输出12
}

第二次调用fn_static()函数,不会再将n初始化为10,因为只能初始化一次,所以最后的结果是12

void fn(void) {
	int n = 10; //普通变量, 每次执行都会初始化,n 在栈区
	printf("n=%d\n", n);
	n++;
	printf("n++=%d\n", n);
}
void fn_static(void) { 
	static int n = 10; //静态局部变量, 放在静态存储区,全局性质空间
	printf("\nstatic n=%d\n", n); // 10
	n++; // n = 11
	printf("\nn = %d\n", n); // 11
}
int main(void) {
	fn();
	printf("--------------------\n");

	fn_static();
	printf("--------------------\n");

	fn();
	printf("--------------------\n");

	fn_static();//只初始化一次,所以n++会输出12
	getchar();
	return 0;
}

n=10
n++=11
——————–

static n=10

n = 11
——————–
n=10
n++=11
——————–

static n=11

n = 12

 全局变量使用static修饰

  • 普通全局变量对整个工程可见,其他文件可以使用extern外部声明后直接使用。之后,其他文件不能再定义一个与其相同名字的变量了,静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响
  • 定义不需要与其他文件共享的全局变量时,加上static关键字能够有效地降低程序模块之间的耦合,避免不同文件同名变量的冲突,且不会误使用

函数使用static修饰

  • 函数的返回方式与全局变量类似,在函数的返回类型前加上static,就是静态函数
  • 非静态函数可以在另一个文件中通过extern引用
  • 静态函数只能在声明它的文件中可见,其他文件不能引用该函数
  • 不同的文件可以使用相同名字的静态函数,互不影响
int num = 10;//普通全局变量
static int num2 = 20;//静态全局变量,只能在本文件中使用,而不能在其他文件使用
#include <stdio.h>
 void fun1(void) {//普通函数(非静态函数)
    printf("hello from  fun1.\n");
}
 static void fun2(void) {//静态函数, 它只能在本文件中使用
    printf("hello from  fun2.\n");
}
#include<stdio.h>

//在一个文件中,使用另一个文件的全局变量,使用extern引用即可
extern int num;
//extern int num2;
int num2 = 60;

extern void fun1(void);

void main() {
	printf("file02文件中num的值为%d\n", num);
	printf("file02文件中num2的值为%d\n", num2);

	fun1();

	getchar();
}

值得注意的是extern int num2编译过程中会出错,static修饰的静态变量只能在当前文件中使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/83265.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!