C 作用域規則
任何一種程式設計中,作用域是程式中定義的變數所存在的區域,超過該區域變數就不能被存取。 C 語言中有三個地方可以宣告變數:
在函數或區塊內部的局部變數
- ##在所有函數外部的
全域變數
- 在
形式參數的函數參數定義中
局部變數、全域變數和形式參數。
#include <stdio.h> int main (){ /* 局部变量声明 */ int a, b; int c; /* 实际初始化 */ a = 10; b = 20; c = a + b; printf ("value of a = %d, b = %d and c = %d\n", a, b, c); return 0;}全域變數全域變數是定義在函數外部,通常是在程式的頂部。全域變數在整個程式生命週期內都是有效的,在任意的函數內部能存取全域變數。 全域變數可以被任何函數存取。也就是說,全域變數在宣告後整個程式中都是可用的。以下是使用全域變數和局部變數的實例:
#include <stdio.h> /* 全局变量声明 */int g; int main (){ /* 局部变量声明 */ int a, b; /* 实际初始化 */ a = 10; b = 20; g = a + b; printf ("value of a = %d, b = %d and g = %d\n", a, b, g); return 0;}在程式中,局部變數和全域變數的名稱可以相同,但是在函數內,局部變數的值會覆寫全域變數的值。下面是一個實例:
#include <stdio.h> /* 全局变量声明 */int g = 20; int main (){ /* 局部变量声明 */ int g = 10; printf ("value of g = %d\n", g); return 0;}當上面的程式碼被編譯和執行時,它會產生下列結果:
value of g = 10形式參數函數的參數,形式參數,被當作該函數內的局部變量,它們會優先覆蓋全域變數。下面是一個實例:
#include <stdio.h> /* 全局变量声明 */int a = 20; int main (){ /* 在主函数中的局部变量声明 */ int a = 10; int b = 20; int c = 0; int sum(int, int); printf ("value of a in main() = %d\n", a); c = sum( a, b); printf ("value of c in main() = %d\n", c); return 0;}/* 添加两个整数的函数 */int sum(int a, int b){ printf ("value of a in sum() = %d\n", a); printf ("value of b in sum() = %d\n", b); return a + b;}當上面的程式碼被編譯和執行時,它會產生下列結果:
value of a in main() = 10value of a in sum() = 10value of b in sum() = 20value of c in main() = 30初始化局部變數和全域變數當局部變量被定義時,系統不會對其初始化,您必須自行對其初始化。定義全域變數時,系統會自動對其初始化,如下所示:
初始化預設值 | |
---|---|
int | |
char | |
float | |
double | |
#pointer |