c语言static作用是什么从基础到进阶的全面讲解附代码示例

admin C语言 6


是不是很多朋友学 C 语言时,都被 static 这个关键字搞晕过?课本上写的 “静态存储”“内部链接” 这些词,看着就像天书,更别说搞懂它到底有啥用了。但不管是考试还是实际写代码,static 又总出现,躲都躲不开。其实啊,static 的作用说难也难,说简单也简单,今天兔子哥就从基础讲到进阶,再配上代码例子,保证让你弄明白它到底能干啥,一起往下看吧!

基础篇:static 修饰局部变量,让它 “记住” 值


咱们先从最简单的用法说起 —— 在函数里用 static 修饰局部变量。平常咱们定义的局部变量,比如 int a;,每次函数调用的时候都会重新赋值,函数跑完了,这个变量就没了,下次调用又得从头来。但加了 static 之后,它就像有了记忆力,能记住上次的值。
看个例子你就明白了:
plaintext
#include void count(){int normal = 0;  // 普通局部变量static int stat = 0;  // static修饰的局部变量normal++;stat++;printf("普通变量:%d,static变量:%d\n", normal, stat);}int main(){count();count();count();return 0;}

运行结果会是这样:
普通变量:1,static 变量:1
普通变量:1,static 变量:2
普通变量:1,static 变量:3
看到没?普通变量每次都是 1,因为它每次都重新变成 0;而 static 变量能记住上次加 1 的结果,一次比一次大。这种作用最适合用来计数,比如统计一个函数被调用了多少次,用 static 变量就特别方便。

进阶篇:static 修饰全局变量,给它划个 “小圈子”


全局变量本来是整个程序都能用的,不管在哪个文件里,只要声明一下就能访问。但如果用 static 修饰全局变量,它的 “活动范围” 就变小了,只能在自己所在的那个文件里用,别的文件想碰它都不行。
比如咱们在 a.c 里写:
static int global_data = 100; //static 全局变量
然后在 b.c 里想用到它:
extern int global_data; // 声明一下,想引用 a.c 里的变量
printf ("% d", global_data); // 尝试打印
这时候编译肯定会报错,说找不到 global_data。这就好比给全局变量划了个小圈子,只能在自己的文件里待着。为啥要这么做呢?主要是为了避免重名。大项目里文件多,很容易出现同名的全局变量,用 static 圈起来,就不会互相干扰了。

高级篇:static 修饰函数,限制它的 “朋友圈”


不光变量能用 static 修饰,函数也可以。用 static 修饰的函数,就像加了个好友验证,只有同一个文件里的代码能调用它,别的文件想调用,门儿都没有。
举个例子,在 file1.c 里定义一个 static 函数:
static void print_msg ()
{
printf ("这是个 static 函数 \n");
}
然后在 file2.c 里想调用它:
print_msg (); // 尝试调用 file1.c 里的 static 函数
编译的时候会提示 “未定义的引用”,就是找不到这个函数。这种用法适合那些 “小帮手” 函数,它们只在当前文件里有用,没必要让整个程序都看见,用 static 藏起来,代码会更安全,也更清晰。兔子哥写代码时,经常把一些辅助性的小函数用 static 修饰,省得别人误用。

一张表格总结 static 的三个作用,看完就忘不了


修饰的东西具体作用通俗理解
局部变量让变量只初始化一次,函数结束后不消失,保留当前值给变量装个记忆卡,下次接着用
全局变量把变量的作用范围限制在当前文件,其他文件无法访问给变量围个篱笆,不让外人进
函数让函数只能在当前文件被调用,其他文件看不见给函数设个密码,只有自己人能用

新手常问的几个问题,这里一次性说清楚


有人可能会问,static 局部变量和全局变量有啥区别啊?虽然 static 局部变量能 “记住” 值,但它还是局部变量,只能在函数内部用;全局变量就算加了 static,也能在整个文件里用,这是本质区别。
还有人问,不用 static 行不行?当然行,但用对了能让代码更规范。比如你写了个统计点击量的函数,每次调用都要加 1,用 static 局部变量就很合适;再比如项目里有个函数,就当前文件能用,加个 static,别人就不会在别的地方瞎调用了。
兔子哥得提醒一句,别觉得 static 好用就到处加,用多了反而不好。比如 static 全局变量多了,文件之间的数据传递会变麻烦;static 函数多了,代码的复用性也会降低。所以啊,该用的时候用,不该用的时候别瞎用。
最后想跟大家说,static 的作用看着多,其实多用几个例子试试就明白了。最好的办法就是把上面的代码敲一遍,改改参数跑跑看,比光看书强十倍。刚开始可能会忘,但用着用着就熟了。我当初也是写了好几个小程序,才真正搞懂 static 到底咋回事。希望这篇文章能帮到你,有啥不懂的地方,随时来问兔子哥!

标签: 基础篇 是不是

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~