1、static修饰局部变量 ---->静态局部变量
-
存储期:静态局部变量的存储期为整个程序运行期间,而不是仅在函数调用期间。
-
作用域:仍然局限于定义它的函数内部,其他函数不能访问。
#include <stdio.h>
void func() {
static int count = 0; // 静态局部变量
count++;
printf("count = %d\n", count);
}
int main() {
func(); // 输出 count = 1
func(); // 输出 count = 2
return 0;
}
| xuanmiao@linux:~/Test$ ./test count = 1 count = 2 |
静态局部变量被函数值传递返回,函数外部不能修改静态局部变量!
#include <stdio.h>
int function()
{
static int count = 0;
printf("function : before count is %d \r\n",count);
count++;
printf("function : after count is %d \r\n",count);
return count;
}
int main()
{
int count = 0;
count = function();
count ++;
printf("main:count is %d \r\n",count);
count = function();
count = function();
printf("main:count is %d \r\n",count);
}
xuanmiao@linux:~/Test/C$ ./test1
function : before count is 0
function : after count is 1
main:count is 2
function : before count is 1
function : after count is 2
function : before count is 2
function : after count is 3
main:count is 3
2、static修饰全局变量 ---->静态全局变量
- 作用域:静态全局变量只能在定义它的源文件中使用,不能被其他源文件访问
#include <stdio.h>
static int globalVar = 10; // 静态全局变量
void printGlobalVar()
{
printf("file1.c globalVar = %d\n", globalVar);
}
#include <stdio.h>
extern int globalVar; // 尝试访问file1.c中的globalVar
int main()
{
printf("file2.c globalVar = %d\n", globalVar); // 错误:globalVar未定义
return 0;
}
| xuanmiao@linux:~/Test$ gcc file1.c file2.c -o file /usr/bin/ld: /tmp/ccxTEwXg.o: in function `main': file2.c:(.text+0xa): undefined reference to `globalVar' collect2: error: ld returned 1 exit status |
3、static修饰函数---->静态函数
- 作用域:静态函数仅作用于定义它的源文件
#include <stdio.h>
static void staticFunc()
{ // 静态函数
printf("This is a static function.\n");
}
void callStaticFunc()
{
staticFunc(); // 正常调用
}
#include <stdio.h>
extern void callStaticFunc();
extern void staticFunc(); // 尝试声明file1.c中的静态函数
int main()
{
callStaticFunc(); // 正常调用
staticFunc(); // 错误:staticFunc未定义
return 0;
}
| xuanmiao@linux:~/Test$ gcc file3.c file4.c -o file /usr/bin/ld: /tmp/ccWI889u.o: in function `main': file4.c:(.text+0x18): undefined reference to `staticFunc' collect2: error: ld returned 1 exit status |
静态局部变量、静态全局变量、静态函数
浙公网安备 33010602011771号