變數(variable)可以理解成一塊記憶體區域,通過變數名,可以引用這塊記憶體區域,獲取裡面存儲的值。 變數名 標識符(identifier)命名有嚴格的規範。 只能由字母、數字和下劃線(_)組成。 不能以數字開頭。 長度不能超過63個字元。 不能使用關鍵字和保留字。 auto, break, cas ...
變數(variable)可以理解成一塊記憶體區域,通過變數名,可以引用這塊記憶體區域,獲取裡面存儲的值。
變數名
標識符(identifier)命名有嚴格的規範。
- 只能由字母、數字和下劃線(
_
)組成。 - 不能以數字開頭。
- 長度不能超過63個字元。
- 不能使用關鍵字和保留字。
auto, break, case, char, const, continue, default, do, double,
else, enum, extern, float, for, goto, if, inline, int, long,
register, restrict, return, short, signed, sizeof, static, struct,
switch, typedef, union, unsigned, void, volatile, while
- 兩個下劃線開頭 的變數名,以及一個 下劃線 + 大寫英文字母開頭 的變數名,也是系統保留的,不能起。
變數聲明
C 語言的變數,必須先聲明後使用,如果一個變數沒有聲明,就直接使用,會報錯。
聲明變數時,必須把變數的類型告訴編譯器。
int height; // 聲明瞭變數 height,並且指定類型為 int(整數)。
變數賦值
C 語言會在變數聲明時,就為它分配記憶體空間,但是不會清除記憶體裡面原來的值。
這導致聲明變數以後,變數會是一個隨機的值,所以變數一定要賦值以後才能使用。
int num = 42;
num = 43;
int x = 1, y = 2; // 多個相同類型變數的賦值,可以寫在同一行。
賦值表達式有返回值,等於等號右邊的值。
int x;
printf("%i", x = 2); // 輸出 2
C 語言有左值(left value)和右值(right value)的概念。
左值是可以放在賦值運算符左邊的值,一般是變數;右值是可以放在賦值運算符右邊的值,一般是具體的值。
變數作用域
作用域(scope)指的是變數生效的範圍。
作用域分類
C 語言的變數作用域主要有兩種:文件作用域(file scope)和塊作用域(block scope)。
- 文件作用域(file scope)
在源碼文件頂層聲明的變數,從聲明的位置到文件結束都有效。
- 塊作用域(block scope)
由大括弧({}
)組成的代碼塊,它形成一個單獨的作用域。
凡是在塊作用域裡面聲明的變數,只在當前代碼塊有效,代碼塊外部不可見。
int a = 12;
if (a == 12) {
int b = 99;
printf("%d %d\n", a, b); // 12 99
}
printf("%d\n", a); // 12
printf("%d\n", b); // 出錯,變數 b 是在if代碼塊裡面聲明的,所以對於大括弧外面的代碼,這個變數是不存在的。
作用域嵌套
代碼塊可以嵌套,內層代碼塊可以使用外層聲明的變數,但外層不可以使用內層聲明的變數。
如果內層的變數與外層同名,那麼會在當前作用域 覆蓋
外層變數。
{
int i = 10;
{
int i = 20;
printf("%d\n", i); // 20
}
printf("%d\n", i); // 10
}
參考 C 語言教程