一個變量的誕生我們可以從它的存儲地址,作用域以及它的鏈接來描述它。
存儲地址
自動存儲地址(棧空間):變量的創建和銷燬是由編譯器來自動控制的。
靜態存儲地址(靜態空間):變量一旦被分配空間就不會被銷燬。
手動存儲地址(堆空間):變量的創建和銷燬是由程序員所控制的。
寄存器存儲地址(寄存器中):變量的創建會去嘗試着申請寄存器空間,申請失敗則自動退化爲自動存儲區。
作用範圍
代碼塊作用域:變量的使用範圍在代碼塊中。
文件作用域:變量的使用範圍在全文件中。
鏈接
空鏈接:其他地方無法使用具有空鏈接的變量。
外部鏈接:外部文本也可使用外部鏈接的變量。
內部鏈接:外部文件不可使用內部鏈接的變量。
關鍵字
自動
關鍵字auto聲明瞭一個變量具有自動存儲地址,作用域在代碼塊內和空鏈接的特性。聲明方式爲在代碼塊內聲明。
#include "stdio.h"
int main()
{
auto int a;
return 0;
}
具有外部鏈接的靜態
在main函數外部聲明瞭一個變量,該變量就具有:靜態存儲地址,作用域在文件中,外部鏈接。別的文件想使用該變量則需要加上extern關鍵字。
#include "stdio.h"
int a;
int main()
{
return 0;
}
具有內部鏈接的靜態
在main函數外部聲明瞭一個變量同時加上static,該變量就具有:靜態存儲地址,作用域在文件中,內部鏈接。
#include "stdio.h"
static int a;
int main()
{
return 0;
}
空鏈接的靜態
在代碼塊內聲明瞭一個變量同時加上static,該變量就具有:靜態存儲地址,作用域在代碼塊中,空鏈接。
#include "stdio.h"
int main()
{
static int a;
return 0;
}
寄存器
在代碼塊內聲明瞭一個變量同時加上register,該變量就具有:寄存器存儲地址,作用域在代碼塊中,空鏈接。
#include "stdio.h"
int main()
{
register int a;
return 0;
}
基於指針的存儲類
上述的存儲類有一個共同之處:再決定了使用哪一種存儲類之後,就自動決定了作用域和存儲時期。
在我們學過指針之後,我們可以申請一種更強大的變量。然後通過指針操作對其進行操作,
#include "stdio.h"
int main()
{
int * pa = (int *)malloc( sizeof(int) );
return 0;
}
還未寫完。有空來完善