1、static关键字了解么,它的作用是什么?
1、static修饰局部变量时:①对其存储位置进行改变,存储在静态区;②改变其生命周期,为整个源程序,因此它只被初始化一次,并且被声明为静态的变量在这一函数被调用过程中维持其值不变。
2、static修饰全局变量时:改变其作用域,在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问,它是一个本地的全局变量(只能被当前文件使用)。
3、static修饰函数时:改变其作用域,一个被声明为静态的函数只可被这一模块内的其它函数调用。即,这个函数被限制在声明它的模块的本地范围内使用(只能被当前文件使用)
修饰局部变量实例:
#include <stdio.h>
void nonStaticVarFunction() {
// 没有使用static修饰的局部变量
int var = 0;
var++;
printf("Non-static var: %d\n", var); // 输出的值总是 1
}
void staticVarFunction() {
// 使用static修饰的局部变量
static int staticVar = 0;
staticVar++;
printf("Static var: %d\n", staticVar); // 输出的值会递增
}
int main() {
for (int i = 0; i < 3; i++) {
nonStaticVarFunction();
}
for (int i = 0; i < 3; i++) {
staticVarFunction();
}
return 0;
}
输出结果:
Non-static var: 1
Non-static var: 1
Non-static var: 1
Static var: 1
Static var: 2
Static var: 3
解析:这个例子展示了没有使用static修饰的局部变量var每次调用nonStaticVarFunction函数时都会被重新初始化为0,然后增加1并打印出来,因此输出总是1。而static修饰的局部变量staticVar在第一次调用staticVarFunction函数时初始化为0,之后每次调用函数都会保留上次调用结束时的值,并继续递增,所以输出是递增的。这说明了static`修饰符对局部变量生命周期的影响,使变量跨函数调用保持状态。
修饰函数实例:假设我们有两个源文件:main.c和help.c。我们在help.c中定义了一个static函数,这意味着这个函数只能在help.c中被调用,尝试在main.c中调用它将导致链接错误。
#include <stdio.h>
// static修饰的函数,仅在本文件内可见
static void printHello() {
printf("Hello from helper.c\n");
}
// 全局函数,可以被其他文件调用
void callPrintHello() {
printHello();
}
输出结果:
#include <stdio.h>

最低0.47元/天 解锁文章
300

被折叠的 条评论
为什么被折叠?



