C語言:const關鍵字用法

const關鍵字在C語言中用於保護數據不被修改,即設置數據爲只讀模式。具體有以下幾種用法:
1. const創建變量

const double PI = 3.1415926; /* const 變量 */
const int days[5] = {0, 1, 2, 3, 4};    /* const 數組 */

對於const變量和const數組,只能在定義的時候將其初始化,定義完成後即會變成只讀模式,其他任何時候再去嘗試改變其值都會造成編譯錯誤。
例如,再將上訴的PI = 2.14;都是錯誤的,對於數組也是一樣。
2. 對形式參數使用const:
在函數參數指針傳遞的時候,我們有時候只是想調用的函數使用參數的值而非改變它。對此,我們可以使用const關鍵字限定函數的形式參數,函數聲明如下:

int function(const char *Str, int len);

對於function函數,參數Str的內容是在函數中是隻讀的,不允許被改變的。但在函數之外的位置卻是一個允許讀寫操作的,不必將Str變量定義爲const變量,以至於全局只讀。這樣既兼顧了數據的安全,也不妨礙其讀寫的自由。
3. const與指針
const聲明的指針有三種:只讀指針,位置固定指針,位置固定且爲只讀的指針。

int buffer[3] = {0, 1, 2};
const int *p1 = buffer;       /* 只讀指針 */
int *const p2 = buffer;       /* 位置固定指針 */
const int *const p3 = buffer; /* 位置固定且只讀指針 */

A. 只讀指針
對於指針p1的定義方式,const修飾的是p1地址的數據,所以p1指向的數據爲只讀的,即只允許通過指針p1讀取buffer中的值,而不允許修改。注意,p1是可以被修改的,即類似p1++;等操作是允許的,表示指向 buffer[1]。

B. 位置固定指針
對於指針p2,const修飾的是p2,即p2爲只讀的,即p2固定指向數組buffer的起始地址,不能被改變。一般用於記錄某一關鍵位置。例如對p2 = &days[0]等操作都是會造成編譯出錯的。

C. 位置固定且爲只讀的指針
最後,在創建指針時還可以使用兩次const,改指針既不能更改它所指向的地址,也不能修改指向地址的值,對於指針p3,一些操作都是不允許的:

p3 = &days[0]; /* 不允許 */
*p3 = 999;     /* 不允許 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章