静态变量的概念
在C语言中,静态变量(static variable)是一种具有特定特性的局部变量,它的主要特点如下:
1、生命周期长:静态变量的生命周期从程序开始执行到程序结束,其间其值不会改变,这意味着在函数调用过程中,静态变量的值会保持不变,而不是每次调用函数时都重新初始化。
2、初始化次数限制:静态变量只会被初始化一次,即在程序启动时进行初始化,如果在程序运行过程中对静态变量进行了多次初始化,只有最后一次初始化会被保留。
3、存储位置:静态变量的存储位置与普通局部变量相同,通常存放在程序的数据段或BSS段,为了保证静态变量的唯一性,编译器会自动为静态变量分配一个独立的内存空间。
4、作用域:静态变量的作用域仅限于定义它的函数内部,不能在其他函数中使用,这是因为静态变量具有文件作用域(file scope),即只能在定义它的源文件中使用。
静态变量的使用方法
1、在函数内部声明和初始化静态变量:
void func() { static int count = 0; // 声明并初始化静态变量count count++; printf("count: %d ", count); }
2、在全局范围内声明和初始化静态变量:
include <stdio.h> static int global_count = 0; // 声明并初始化全局静态变量global_count int main() { for (int i = 0; i < 5; i++) { global_count++; printf("global_count: %d ", global_count); } return 0; }
3、在多个源文件中共享静态变量:
要实现多个源文件之间的静态变量共享,需要将静态变量的定义放在头文件(header file)中,并在每个源文件中包含该头文件,创建一个名为shared.h
的头文件:
// shared.h ifndef SHELL_H_INCLUDED define SHELL_H_INCLUDED extern int shared_var; // 声明共享静态变量shared_var void set_shared_var(int value); // 声明设置共享静态变量的函数 int get_shared_var(); // 声明获取共享静态变量的函数 endif // SHELL_H_INCLUDED
在一个源文件中定义共享静态变量和相关函数:
// shell.c include "shared.h" // 包含头文件以使用共享静态变量和相关函数 include <stdio.h> static int shared_var = 0; // 定义共享静态变量shared_var并初始化为0 void set_shared_var(int value) { // 定义设置共享静态变量的函数 shared_var = value; // 将传入的值赋给共享静态变量shared_var } int get_shared_var() { // 定义获取共享静态变量的函数 return shared_var; // 返回共享静态变量shared_var的值 }
在其他源文件中包含shared.h
头文件,并使用共享静态变量和相关函数:
// main.c include "shared.h" // 包含头文件以使用共享静态变量和相关函数 include <stdio.h> int main() { int local_var = get_shared_var(); // 从另一个源文件获取共享静态变量的值并赋给局部变量local_var fprintf(stderr, "local_var: %d ", local_var); // 输出局部变量local_var的值,结果为0(因为共享静态变量shared_var的初始值为0) fprintf(stderr, "set_shared_var(10); "); // 在当前源文件中设置共享静态变量的值为10,但不影响其他源文件中的共享静态变量值 fprintf(stderr, "get_shared_var(); "); // 在当前源文件中获取共享静态变量的值,结果为10(因为当前源文件已修改了共享静态变量的值) fprintf(stderr, "get_shared_var(); "); // 在当前源文件中再次获取共享静态变量的值,结果仍为10(因为当前源文件已修改了共享静态变量的值) fprintf(stderr, "set_shared_var(20); "); // 在另一个源文件中设置共享静态变量的值为20,但不影响当前源文件中的共享静态变量值(因为两个源文件是独立的) fprintf(stderr, "get_shared_var(); "); // 在当前源文件中获取共享静态变量的值,结果为10(因为当前源文件未修改共享静态变量的值) fprintf(stderr, "get_shared_var(); "); // 在当前源文件中再次获取共享静态变量的值,结果仍为10(因为当前源文件未修改共享静态变量的值) fprintf(stderr, "set_shared_var(30); "); // 在另一个源文件中再次设置共享静态变量的值为30,但不影响当前源文件中的共享静态变量值(因为两个源文件是独立的) fprintf(stderr, "get_shared_var(); "); // 在当前源文件中获取共享静态变量的值,结果为10(因为当前源文件未修改共享静态变量的值) fprintf(stderr, "get_shared_var(); "); // 在当前源文件中再次获取共享
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/182209.html