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

C 語言區域變數與全域變數:作用域、生命週期與遮蔽規則

     編輯:C 語言基礎

作用域指變數的有效範圍,由定義位置決定。

區域變數

  • 定義於函數內部(含形式參數、函數體內變數)。
  • 作用域僅限該函數內部,離開即失效。
  • main 內變數亦為區域變數,其他函數不可存取。
  • 不同函數可同名,互不干擾、記憶體獨立。
  • 區塊 {} 內定義者,作用域限於該區塊。

全域變數

  • 定義於所有函數外部。
  • 預設作用域為整個程式(含所有 .c/.h 檔)。
  • 定義順序影響可見性:定義前不可用,定義後可用。

綜合範例 1:同名變數遮蔽規則

#include <stdio.h>
int n = 10; // 全域
void func1() { int n = 20; printf("func1 n: %d\n", n); }
void func2(int n) { printf("func2 n: %d\n", n); }
void func3() { printf("func3 n: %d\n", n); }
int main() {
    int n = 30; // main 區域
    func1(); func2(n); func3();
    { int n = 40; printf("block n: %d\n", n); } // 區塊區域
    printf("main n: %d\n", n);
    return 0;
}

輸出:

func1 n: 20
func2 n: 30
func3 n: 10
block n: 40
main n: 30

規則: 就近原則,小作用域遮蔽大作用域同名變數;只能從小向大查找,不能反向。

綜合範例 2:全域變數傳遞多返回值

#include <stdio.h>
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;
}
int 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);
    return 0;
}

函數僅能單一返回值,需多值輸出時可利用全域變數(或指標參數)。

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