此篇文章针对面试时面试官提问进行总结,有需要其他资料的小伙伴直接点击下方链接领取:
关于static关键字的一些总结:
①修饰局部变量:
局部变量属于栈区,用static进行修饰以后会改变局部变量的生存周期,使局部变量进到数据区(全局变量/静态区),此时需要注意的是变量只会初始化一次,下次使用到会保留上一次执行的结果。
①非静态局部变量:
#include <stdio.h>
void demoFunction() {
// 非静态局部变量,在每次函数调用时重新初始化
int count = 0;
count++;
printf("Non-static count: %d\n", count);
}int main() {
demoFunction(); // 输出 Non-static count: 1
demoFunction(); // 输出 Non-static count: 1
demoFunction(); // 输出 Non-static count: 1
return 0;
}
②静态局部变量:
#include <stdio.h>
void demoFunction() {
// 静态局部变量,只会初始化一次
static int count = 0;
count++;
printf("Static count: %d\n", count);
}
int main() {
demoFunction(); // 输出 Static count: 1
demoFunction(); // 输出 Static count: 2
demoFunction(); // 输出 Static count: 3
return 0;
}
②修饰全局变量:
首先,我们要知道全局变量具有外部链接属性,使用static修饰会改变全局变量的属性,变成内部链接属性,相当于作用域缩小了,此时在外部使用程序会报错。
③修饰函数:
函数与全局变量一样具有外部链接属性
与全局变量一样,函数被static修饰后,外部链接属性就变成了内部链接属性,其作用域被缩小,这个函数只能在自己所在的.c文件中使用,在其他文件中即使声明了也无法使用。
#嵌入式开发 #嵌入式 #C语言 #面试题