1. 程式人生 > >const與#define巨集定義的區別——C語言深度剖析

const與#define巨集定義的區別——C語言深度剖析

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指向的物件都不可變