const與#define巨集定義的區別——C語言深度剖析
阿新 • • 發佈:2019-02-09
const定義的只讀變數在程式執行過程中只有一份拷貝(因為它是全域性的只讀變數,存放在靜態區),而#define定義的巨集常量在記憶體中有若干個拷貝。
#define巨集是在預編譯階段進行替換,而const修飾的只讀變數是在編譯的時候確定其值。
#define巨集沒有型別,而const修飾的只讀變數具有特定的型別
===========================================
const int *p; //p可變,p指向的物件不可變
int const*p; //p可變,p指向的物件不可變
int *const p; //p不可變,p指向的物件可變
const int *const p; //指標p和p指向的物件都不可變
這裡給出一個記憶和理解的方法:
先忽略型別名(編譯器解析的時候也是忽略型別名),我們看const離哪個近。"近水樓臺先得月",離誰近就修飾誰。
判斷時忽略括號中的型別
const (int) *p; //const修飾*p,*p是指標指向的物件,不可變
(int) const *p; //const修飾*p,*p是指標指向的物件,不可變
(int)*const p; //const修飾p,p不可變,p指向的物件可變
const (int) *const p; //前一個const修飾*p,後一個const修飾p,指標p和p指向的物件都不可變