首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言變量作用域:局部變量、全局變量與存儲類型詳解

     編輯:關於C語言

局部變量

  • 定義於函數內部(含形參)
  • 作用域限於定義它的函數/復合語句內
  • 主函數變量亦屬局部,不可跨函數訪問
  • 不同函數可同名,互不干擾

復合語句作用域示例

main() {
    int i=2, j=3, k;
    k = i + j; // k=5
    {
        int k = 8; // 新 k 遮蔽外層 k
        if (i == 3) printf("%d\n", k); // 輸出 8
    }
    printf("%d\n%d\n", i, k); // 輸出 2, 5 (外層 k)
}

全局變量

  • 定義於所有函數外部
  • 屬於源文件,作用域為整個源程序
  • 使用前需在函數內 extern 聲明(定義在前可省略)

作用域規則示例


int a, b;       // 全局
void f1() { ... } // 可直接用 a,b
float x, y;     // 全局,但定義在 f1 後
int fz() { ... }  // 需 extern x,y 才能用
main() { ... }    // 可用 a,b,x,y

實例:外部變量實現多值返回


int s1, s2, s3; // 全局存面積
int vs(int a, int b, int c) {
    int v = a*b*c;
    s1 = a*b; s2 = b*c; s3 = a*c;
    return v; // 返回體積
}
main() {
    int v, l, w, h;
    scanf("%d%d%d", &l, &w, &h);
    v = vs(l, w, h);
    printf("v=%d s1=%d s2=%d s3=%d\n", v, s1, s2, s3);
}

全局變量定義 vs 聲明

概念位置次數可初始化
定義所有函數外一次是
聲明使用它的函數內多次否

同名遮蔽


int l=3, w=4, h=5; // 全局
int vs(int l, int w) { // 形參同名
    extern int h;
    return l*w*h; // 用形參 l,w + 全局 h
}
main() {
    extern int w, h;
    int l = 5; // 局部遮蔽全局 l
    printf("%d", vs(l, w)); // 5*4*5=100
}

存儲類型與生存期

  • 動態存儲:自動/寄存器變量,調用時分配,返回釋放
  • 靜態存儲:外部/靜態局部/靜態全局,程序啟動分配,結束釋放
  • 生存期 = 變量在內存中存在的時間段

作用域(空間可見性)與生存期(時間存在性)是理解變量行為的兩個正交維度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved