目錄
變量
變量的基礎
- 變量在程序中用變量名錶示。變量名由用戶根據其用途任意命名。
- 變量名由字母、數字、下劃線組成,不能以數字開頭,不能和C的關鍵字重名。
- 在程序運行時,變量佔據存儲空間的大小由其數據類型決定。
- 變量在內存空間中的首地址,稱爲變量的地址。
變量的說明
變量在程序中使用時,必須預先說明它們的存儲類型和數據類型。
- 變量說明的一般形式是:
<存儲類型> <數據類型 > <變量名> ;
- <存儲類型>是關鍵詞auto(默認,可省略)、register、static和extern
- <數據類型>可以是基本數據類型,也可以是自定義的數據類型
存儲類型
auto(動態存儲類型)
- auto說明的變量只能在某個程序範圍內使用,通常在函數體內或函數中的複合語句裏。(默認是隨機值)
- 在函數體的某程序段內說明auto存儲類型的變量時可以省略關鍵字auto
registe(寄存器存儲類型)
- register稱爲寄存器型,register變量是想將變量放入CPU的寄存器中,這樣可以加快程序的運行速度。
- 如申請不到就使用一般內存,同auto ;
- register變量必須是能被CPU所接受的類型。這通常意味着register變量必須是一個單個的值,並且長度應該小於或者等於整型的長度。
- 不能用“&”來獲取register變量的地址。
- 由於寄存器的數量有限,真正起作用的register修飾符的數目和類型都依賴於運行程序的機器。
- 在某些情況下,把變量保存在寄存器中反而會降低程序的運行速度。因爲被佔用的寄存器不能再用於其它目的;或者變量被使用的次數不夠多,不足以裝入和存儲變量所帶來的額外開銷。
- 只有局部變量和形參可以作爲register變量,全局變量不行
static(靜態存儲類型)
static變量稱爲靜態存儲類型的變量,既可以在函數體內(局部變量),也可在函數體外(全局變量)說明。(默認是0)
局部變量使用static修飾,有以下特點:
- 在內存中以固定地址存放的,而不是以堆棧方式存放
- 只要程序沒結束,就不會隨着說明它的程序段的結束而消失,它下次再調用該函數,該存儲類型的變量不再重新說明,而且還保留上次調用存入的數值。
局部變量不使用static修飾的情況
#include <stdio.h>
int main(int argc, const char *argv)
{
int i = 0;
while(i < 5)
{
int a = 0;
a++;
printf("a=%d", a)
i++;
}
return 0;
}
程序運行結果如下
局部變量使用static修飾的情況
#include <stdio.h>
int main(int argc, const char *argv)
{
int i = 0;
while(i < 5)
{
static int a = 0;
a++;
printf("a=%d", a)
i++;
}
return 0;
}
程序運行結果如下
extern(靜態、外部鏈接)
- 當變量在一個文件中的函數體外說明,所有其他文件中的函數或程序段都可引用這個變量。
- extern稱爲外部參照引用型,使用extern說明的變量是想引用在其它文件中函數體外部說明的變量。
- static修飾的全部變量,其它文件無法使用