關鍵字static的使用方法
對于普通的局部變量,每次調用的時候,都會在棧里初始化1次,
1 #include <stdio.h>
2
3
4 void func()
5 {
6 static int aa = 11;
7
8 printf("aa= %d ",aa++);
9
10 }
11
12 int main(int argc, char **argv)
13 {
14
15 func();
16 func();
17
18 return 0;
19 }

函數中靜態變量aa 只初始化一次,每次訪問的值應該是上一次調用到該函數時最后處理的結果,
三、static 函數
1. 概念:
在函數的返回類型前加上關鍵字static,函數就被定義成為靜態函數。
函數的定義和聲明默認情況下是extern的,但靜態函數只是在聲明他的文件當中可見,不能被其他文件所用。
static函數(也叫內部函數)只能被本文件中的函數調用,而不能被同一程序其它文件中的函數調用。
區別于一般的非靜態函數(外部函數) static在c里面可以用來修飾變量,也可以用來修飾函數。
先看用來修飾變量的時候。變量在c里面可分為存在全局數據區、棧和堆里。
其實我們平時所說的堆棧是棧而不包含堆,不要弄混。
2. 定義靜態函數的好處:<1>其他文件中可以定義相同名字的函數,不會發生沖突,不用擔心自己定義的函數,是否會與其它文件中的函數同名,因為同名也沒有關系。<2> 靜態函數不能被其他文件所用。存儲說明符auto,register,extern,static,對應兩種存儲期:自動存儲期和靜態存儲期。<3> 統計次數功能聲明函數的一個局部變量,并設為static類型,作為一個計數器,這樣函數每次被調用的時候就可以進行計數。這是統計函數被調用次數的最好的辦法,因為這個變量是和函數息息相關的,而函數可能在多個不同的地方被調用,所以從調用者的角度來統計比較困難。<4> 靜態函數會被自動分配在一個一直使用的存儲區,直到退出應用程序實例,避免了調用函數時壓棧出棧,速度快很多。舉例
a.c
1 #include <stdio.h>
2
3 void func();
4
5 int main(int argc, char **argv)
6 {
7
8 func();
9
10 return 0;
11 }
b.c
1 #include <stdio.h>
2
3 int b = 10;
4
5
6 static void func()
7 {
8 printf("in func b =%d",b);
9 }

編譯
由編譯結果可知,a文件訪問不到b文件中的靜態函數func。
四、一個關于static變量的巧妙的用法-偷梁換柱
如何定義一個和庫函數名一樣的函數,并在函數中調用該庫函數?
關于該問題的答案,彭老師已經已經將分析過程發布于以下文章。
粉絲提問|c語言:如何定義一個和庫函數名一樣的函數,并在函數中調用該庫函數
最新活動更多
- 1 AI狂歡遇上油價破百,全球股市還能漲多久? | 產聯看全球
- 2 OpenAI深夜王炸!ChatGPT Images 2.0實測:中文穩、細節炸,設計師慌了
- 3 6000億美元估值錨定:字節跳動的“去單一化”突圍與估值重構
- 4 Tesla AI5芯片最新進展總結
- 5 連夜測了一波DeepSeek-V4,我發現它可能只剩“審美”這個短板了
- 6 熱點丨AI“瑜亮之爭”:既生OpenClaw,何生Hermes?
- 7 AI界的殺豬盤:9秒刪庫跑路,全員被封號,還繼續扣錢!
- 8 2026,人形機器人只贏了面子
- 9 DeepSeek降價90%:價格屠夫不是身份,是戰略
- 10 AI Infra產業鏈卡在哪里了?



分享













