
- 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 - main 函式
- C - 按值呼叫函式
- C - 按引用呼叫函式
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者自定義函式
- C - 回撥函式
- C - return 語句
- 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程式語言中,**全域性變數**是在所有函式之外定義的變數,通常位於程式的頂部。變數。**全域性變數**在程式的整個生命週期中保持其值,並且可以在為程式定義的任何函式內部訪問。
如果一個函式訪問並修改全域性變數的值,則更新後的值可用於其他函式呼叫。
如果一個變數在某個檔案中定義,則仍然可以透過使用**extern
**關鍵字在另一個程式碼模組中將其訪問為全域性變數。**extern
**關鍵字也可以用來訪問**全域性變數**而不是同名的區域性變數。
宣告全域性變數
在C中宣告全域性變數類似於宣告普通的(區域性)變數,但全域性變數是在函式之外宣告的。
語法
考慮以下宣告全域性變數的語法
data_type variable_name; // main or any function int main() { }
C語言中全域性變數的示例
以下程式展示瞭如何在程式中使用全域性變數
#include <stdio.h> /* global variable declaration */ int g = 10; int main(){ /* local variable declaration */ int a; /* actual initialization */ a = g * 2; printf("Value of a = %d, and g = %d\n", a, g); return 0; }
輸出
執行此程式碼時,將產生以下輸出:
Value of a = 20, and g = 10
訪問全域性變數
全域性變數可在C程式中的所有函式中訪問。如果任何函式更新全域性變數的值,則其更新後的值隨後將對所有其他函式可用。
示例
以下示例演示了在C語言中訪問全域性變數的示例
#include <stdio.h> /* global variable declaration */ int g = 10; int function1(); int function2(); int main(){ printf("Value of Global variable g = %d\n", g); function1(); printf("Updated value of Global variable g = %d\n", g); function2(); printf("Updated value of Global variable g = %d\n", g); return 0; } int function1(){ g = g + 10; printf("New value of g in function1(): %d\n", g); return 0; } int function2(){ printf("The value of g in function2(): %d\n", g); g = g + 10; return 0; }
執行程式碼並檢查其輸出:
Value of Global variable g = 10 New value of g in function1(): 20 Updated value of Global variable g = 20 The value of g in function2(): 20 Updated value of Global variable g = 30
全域性變數的作用域和可訪問性
全域性變數僅對在其聲明後定義的函式可用。全域性變數在任何函式之外宣告,因此預設情況下,它們可以被同一檔案中的所有函式訪問。
示例
在這個例子中,我們在main()函式之前聲明瞭一個全域性變數(x)。還有一個全域性變數y,它是在main()函式之後但在function1()函式之前宣告的。在這種情況下,變數y即使是一個全域性變數,也不能在main()函式中使用,因為它是在之後宣告的。結果,你會得到一個錯誤。
#include <stdio.h> /* global variable declaration */ int x = 10; int function1(); int main(){ printf("value of Global variable x= %d y=%d\n", x, y); function1(); return 0; } int y = 20; int function1(){ printf ("Value of Global variable x = %d y = %d\n", x, y); }
執行此程式碼時,將產生錯誤:
Line no 11: error: 'y' undeclared (first use in this function) 11 | printf ("Value of Global variable x = %d y = %d\n", x, y); | ^
使用extern關鍵字訪問全域性變數
如果在程式中同時存在同名的全域性變數和區域性變數,則應使用extern關鍵字。
示例
在這個C程式中,我們有一個全域性變數和一個同名的區域性變數(x)。現在,讓我們看看如何使用“extern”關鍵字來避免混淆:
#include <stdio.h> // Global variable x int x = 50; int main(){ // Local variable x int x = 10;{ extern int x; printf("Value of global x is %d\n", x); } printf("Value of local x is %d\n", x); return 0; }
輸出
執行此程式碼時,將產生以下輸出:
Value of global x is 50 Value of local x is 10
避免使用全域性變數
**全域性變數**可以簡化程式設計邏輯。它們可以在函式之間訪問,並且不需要使用引數傳遞技術將變數從一個函式傳遞到另一個函式。但是,在C程式中擁有過多的全域性變數並不明智或高效,因為這些變數佔用的記憶體直到程式結束才會釋放。
使用全域性宣告不被認為是一種好的程式設計實踐,因為它沒有實現結構化的方法。出於安全考慮,也不建議使用全域性宣告,因為它們對所有函式都是可訪問的。最後,使用全域性宣告會使程式難以除錯、維護和擴充套件。