
- C程式設計教程
- C - 首頁
- C語言基礎
- C - 概述
- C - 特性
- C - 歷史
- C - 環境設定
- C - 程式結構
- C - Hello World
- C - 編譯過程
- C - 註釋
- C - 詞法單元
- C - 關鍵字
- C - 識別符號
- C - 使用者輸入
- C - 基本語法
- C - 資料型別
- C - 變數
- C - 整數提升
- C - 型別轉換
- C - 型別強制轉換
- C - 布林值
- C語言中的常量和字面量
- C - 常量
- C - 字面量
- C - 轉義序列
- C - 格式說明符
- C語言中的運算子
- C - 運算子
- C - 算術運算子
- C - 關係運算符
- C - 邏輯運算子
- C - 位運算子
- C - 賦值運算子
- C - 一元運算子
- C - 自增和自減運算子
- C - 三元運算子
- C - sizeof 運算子
- C - 運算子優先順序
- C - 其他運算子
- C語言中的決策
- C - 決策
- C - if 語句
- C - if...else 語句
- C - 巢狀 if 語句
- C - switch 語句
- C - 巢狀 switch 語句
- C語言中的迴圈
- C - 迴圈
- C - while 迴圈
- C - for 迴圈
- C - do...while 迴圈
- C - 巢狀迴圈
- C - 無限迴圈
- C - break 語句
- C - continue 語句
- C - goto 語句
- C語言中的函式
- C - 函式
- C - 主函式
- C - 按值呼叫函式
- C - 按引用呼叫函式
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者定義函式
- C - 回撥函式
- C - 返回語句
- C - 遞迴
- C語言中的作用域規則
- C - 作用域規則
- C - 靜態變數
- C - 全域性變數
- C語言中的陣列
- C - 陣列
- C - 陣列的特性
- C - 多維陣列
- C - 將陣列傳遞給函式
- C - 從函式返回陣列
- C - 可變長陣列
- C語言中的指標
- C - 指標
- C - 指標和陣列
- C - 指標的應用
- C - 指標運算
- C - 指標陣列
- C - 指向指標的指標
- C - 將指標傳遞給函式
- C - 從函式返回指標
- C - 函式指標
- C - 指向陣列的指標
- C - 指向結構體的指標
- C - 指標鏈
- C - 指標與陣列
- C - 字元指標和函式
- C - 空指標
- C - void 指標
- C - 懸空指標
- C - 解引用指標
- C - 近、遠和巨型指標
- C - 指標陣列的初始化
- C - 指標與多維陣列
- C語言中的字串
- C - 字串
- C - 字串陣列
- C - 特殊字元
- C語言中的結構體和聯合體
- C - 結構體
- C - 結構體和函式
- C - 結構體陣列
- C - 自引用結構體
- C - 查詢表
- C - 點 (.) 運算子
- C - 列舉 (或 enum)
- C - 結構體填充和打包
- C - 巢狀結構體
- C - 匿名結構體和聯合體
- C - 聯合體
- C - 位域
- C - Typedef
- C語言中的檔案處理
- C - 輸入 & 輸出
- C - 檔案 I/O (檔案處理)
- C預處理器
- C - 預處理器
- C - 指令
- C - 預處理器運算子
- C - 宏
- C - 標頭檔案
- C語言中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類別
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static 關鍵字
- C - 隨機數生成
- C - 命令列引數
- C程式設計資源
- C - 問答
- C - 快速指南
- C - 速查表
- C - 有用資源
- C - 討論
C語言中的靜態變數
預設情況下,C 變數 被歸類為自動儲存型別。當您希望在對不同函式的呼叫之間保留某個值時,靜態變數很有用。靜態變數也用於儲存應在多個函式之間共享的資料。
靜態變數
靜態變數屬於靜態儲存類別,它們只初始化一次,並保留值直到程式結束,static關鍵字用於宣告靜態變數。
靜態變數的特性
以下是 C 程式語言中靜態變數的一些特性:
- 編譯器在計算機的主記憶體中為靜態變數分配空間。
- 與 auto 不同,靜態變數初始化為零而不是垃圾值。
- 如果靜態變數在函式內部宣告,則在每次函式呼叫時都不會重新初始化。
- 靜態變數具有區域性作用域。
宣告靜態變數
要在 C 語言中宣告靜態變數,請使用static關鍵字並分配初始值。以下是宣告靜態變數的語法:
static datatype var = value;
這裡,
- 資料型別表示變數的型別,如 int、char、float 等。
- 變數是使用者給定的變數名。
- 值是賦予變數的任何值。預設為零。
C語言中靜態變數的示例
示例:使用靜態變數
以下是如何在 C 語言中使用靜態變數的示例:
#include <stdio.h> int main(){ auto int a = -28; static int b = 8; printf("The value of auto variable: %d\n", a); printf("The value of static variable b: %d\n",b); if(a != 0) printf("The sum of static variable and auto variable: %d\n",(b+a)); return 0; }
輸出
執行此程式碼時,將產生以下輸出:
The value of auto variable: -28 The value of static variable b: 8 The sum of static variable and auto variable: -20
示例:建立不使用靜態變數的計數器函式
在此示例中,x預設情況下是自動變數,並且在每次呼叫 counter() 函式時都初始化為 0。在每次後續呼叫中,它都會被重新初始化。
#include <stdio.h> int counter(); int main(){ counter(); counter(); counter(); return 0; } int counter(){ int x; printf("Value of x as it enters the function: %d\n", x); x++; printf("Incremented value of x: %d\n", x); }
輸出
執行程式碼並檢查其輸出:
Value of x as it enters the function: 0 Incremented value of x: 1 Value of x as it enters the function: 0 Incremented value of x: 1 Value of x as it enters the function: 0 Incremented value of x: 1
但是,當 counter() 函式中的變數x宣告為static時,在第一次呼叫 counter() 函式時將其初始化為“0”。在每次後續呼叫中,它不會被重新初始化。相反,它保留了之前的值。
示例:使用靜態變數建立計數器
將“x”的宣告更改為“static int x = 0;”並再次執行程式:
#include <stdio.h> int counter(); int main(){ counter(); counter(); counter(); return 0; } int counter(){ static int x = 0; printf("Value of x as it enters the function: %d\n", x); x++; printf("Incremented value of x: %d\n", x); }
輸出
現在,執行此程式碼時,將產生以下輸出:
Value of x as it enters the function: 0 Incremented value of x: 1 Value of x as it enters the function: 1 Incremented value of x: 2 Value of x as it enters the function: 2 Incremented value of x: 3
將靜態變數傳遞給函式
您可以將靜態變數傳遞給函式。但是,形式引數不能宣告為靜態,因為 C 使用函式引數作為函式內部的區域性自動變數。
示例
在此程式碼中,我們將靜態變數傳遞給函式。但是,其值的變化不會反映在呼叫函式中。
#include <stdio.h> int myfunction(int x); int main(){ static int x = 5; myfunction(x); printf("in main - x:%d\n", x); return 0; } int myfunction(int x){ x++; printf("Incremented value of x: %d\n", x); }
輸出
執行程式碼並檢查其輸出:
Incremented value of x: 6 in main - x:5
靜態變數和全域性變數之間的相似之處
靜態變數與全域性變數有一些相似之處。如果兩者都沒有顯式初始化,則都初始化為“0”(對於數字型別)或“空指標”(對於指標)。
靜態變數的作用域僅限於其宣告的函式或塊。這與全域性變數不同,全域性變數可以在整個程式中訪問。此外,靜態變數可以匯入到另一個程式碼檔案中,就像我們使用extern關鍵字一樣。
示例
您也可以將全域性變數宣告為靜態。請檢視以下示例:
#include <stdio.h> int myfunction(); static int x = 5; int main(){ myfunction(x); printf("Inside the main function, x: %d\n", x); return 0; } int myfunction(){ x++; printf("Incremented value of x: %d\n", x); }
輸出
執行此程式碼時,將產生以下輸出:
Incremented value of x: 6 Inside the main function, x: 6
最好使用靜態變數使其只能在檔案中訪問。另一方面,使用全域性(帶extern)變數使其可以在程式的任何地方訪問(如果在其他檔案中宣告為extern)。