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

C 語言作用域規則:局部、全局與形式參數詳解

     編輯:C 語言入門

C 語言作用域規則:局部、全局與形式參數詳解

作用域定義了變量「可見」的程序區域。C 語言中變量可聲明於三處:函數/塊內部(局部)、所有函數外部(全局)、函數參數列表中(形式參數)。理解它們的生命週期與遮蔽規則,是編寫無 Bug 代碼的基石。

局部變量

在函數或代碼塊內聲明,僅在該塊內可見,函數調用結束時銷毀。未初始化的局部變量值不確定(垃圾值)。

#include <stdio.h>
int main() {
    int a = 10, b = 20, c = a + b;
    printf("a=%d, b=%d, c=%d\n", a, b, c);
    return 0;
}

全局變量

聲明於所有函數外部(通常在文件頂部),程序啟動時創建、結束時銷毀,自動初始化為 0/NULL,全程可訪問。

#include <stdio.h>
int g;  // 全局變量,隱式初始化為 0
int main() {
    int a = 10, b = 20;
    g = a + b;
    printf("g = %d\n", g);
    return 0;
}

名稱遮蔽規則

局部變量可與全局變量同名,在局部作用域內局部遮蔽全局:

#include <stdio.h>
int g = 20;  // 全局 g
int main() {
    int g = 10;  // 局部 g 遮蔽全局
    printf("g = %d\n", g);  // 輸出 10
    return 0;
}

形式參數

函數參數屬於局部變量,調用時創建、返回時銷毀,同樣遮蔽同名全局變量。C 語言採用傳值調用,函數內修改參數不影響實參:

#include <stdio.h>
int a = 20;  // 全局 a
int sum(int a, int b) {  // 形式參數 a, b
    printf("sum 中 a = %d\n", a);  // 10
    return a + b;
}
int main() {
    int a = 10;  // 局部 a
    printf("main 中 a = %d\n", a);  // 10
    printf("sum 返回 %d\n", sum(a, 20));  // 30
    return 0;
}

變量初始化默認值表

數據類型全局/靜態默認值局部(自動)默認值
int0未定義(垃圾值)
char'\0'未定義
float/double0.0未定義
pointerNULL未定義

最佳實踐: 總是顯式初始化局部變量,避免因垃圾值導致的不可預測行為。

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