c语言static修饰变量和函数具体用法与注意事项新手入门教程

admin C语言 4


学 C 语言的时候,是不是一碰到 static 就有点发怵?看书上写的那些概念,什么静态存储、作用域限制,绕来绕去的,怎么也记不住。其实啊,static 这东西看着复杂,用熟了就会发现,它无非就是给变量和函数加了些特殊 “属性” 而已。今天兔子哥就给新手朋友们好好讲讲,static 修饰变量和函数到底该怎么用,有哪些要注意的地方,保证用大白话讲明白,一起往下看吧!

static 修饰局部变量,让它有 “记性”


咱们先从最简单的说起,用 static 修饰函数里的局部变量。平常咱们定义的局部变量,比如在函数里写 int a = 0;,每次调用这个函数,a 都会重新变成 0,函数跑完了,a 就没了。但加上 static 之后就不一样了,它会像有记性似的,记住上次的值。
就像这个例子:
plaintext
#include void test() {static int num = 0;  // static修饰局部变量num++;printf("num的值:%d\n", num);}int main() {test();  // 第一次调用test();  // 第二次调用test();  // 第三次调用return 0;}

运行之后会输出 1、2、3。要是没加 static,三次都会输出 1。你看,加了 static,num 就记住了上次加 1 的结果,是不是很像给变量装了个小账本?这种用法最适合计数,比如统计一个函数被调用了多少次,用它就特别方便。
有同学可能会问,那这个变量是不是变成全局的了?不是的啊,它还是局部变量,只能在 test () 函数里用,出了这个函数就访问不了,这点一定要记牢。

static 修饰全局变量,给它划个 “小地盘”


全局变量大家都知道,在一个文件里定义了,其他文件只要用 extern 声明一下就能用。但用 static 修饰全局变量后,它就只能在自己所在的文件里活动了,别的文件想碰它,门儿都没有。
比如在 a.c 里写:
static int data = 10; //static 全局变量
然后在 b.c 里想用时:
extern int data; // 声明一下
printf ("% d", data); // 想打印 data 的值
这时候编译肯定会报错,说找不到 data。这就好比给全局变量划了个小地盘,只能在自己文件里待着。为啥要这么做呢?主要是怕重名。项目大了,文件多,很容易出现同名的全局变量,用 static 圈起来,就不会互相捣乱了。我之前在一个小组项目里,就因为没加 static,两个文件里的全局变量重名了,找了半天才发现问题出在这。

static 修饰函数,限制它的 “朋友圈”


函数也能被 static 修饰,效果跟全局变量差不多,就是把函数的 “朋友圈” 缩小了,只能在自己所在的文件里被调用,别的文件看不见它。
比如在 file1.c 里定义:
static void show () {
printf ("这是 static 函数 \n");
}
然后在 file2.c 里想调用 show (),编译的时候就会报错,说找不到这个函数。这种用法适合那些 “小助手” 函数,它们只在当前文件里有用,没必要让整个项目都看见。兔子哥写代码时,经常把一些辅助计算的小函数用 static 修饰,这样别人看代码的时候,就知道这些函数不用在别的地方调用,能省不少事。

用 static 得注意这些坑,新手很容易栽跟头


  • 别把 static 局部变量当全局变量用。虽然它能记住值,但作用域没变,还是只能在函数内部用,想在别的函数里访问,门儿都没有。之前有个同学就犯过这错,以为加了 static 就能到处用,结果折腾半天也没弄明白为啥报错。
  • static 变量只能用常量初始化。比如 static int a = 5; 行,但 static int a = b; 就不行,哪怕 b 是个全局变量也不行。这点编译器管得很严,写错了肯定会提示错误。
  • 别滥用 static。有些新手觉得 static 好用,就给所有变量和函数都加上,结果搞得代码乱七八糟,变量之间的数据传递都成了问题。该用的时候用,不该用的时候别瞎用,这点很重要。
  • 全局变量和函数被 static 修饰后,虽然在其他文件里用不了,但在本文件里的用法跟普通的没区别,别想太多,正常用就行。

给新手的一点小建议


其实 static 的用法不难,关键是多动手试试。把上面的例子敲一遍,改改参数跑跑看,对比一下加不加 static 的区别,印象就会特别深。我当初学的时候,就是把每个用法都写了个小程序,运行看结果,慢慢就摸透了。
还有啊,遇到不懂的地方别死磕,先记下来,等学到后面再回头看,可能突然就明白了。编程这东西,有时候就是这样,一下子就开窍了。
最后想说,static 是个好东西,用对了能让代码更规范、更安全。但刚开始不用追求一下子全掌握,慢慢来,用着用着就熟了。希望这篇教程能帮到刚学 C 语言的你,有啥不懂的地方,随时来问兔子哥,看到都会回的。

标签: 小账本 不一样

发布评论 0条评论)

  • Refresh code

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