【 C 】const 進一步解讀(由switch引出)
阿新 • • 發佈:2018-12-11
之前有過一篇博文:const 學習筆記,可是讀《C專家程式設計》時候,遇到const還是會感到有點陌生,疑惑。可見,有必要進一步強調一些內容。
首先給出一個案例來引出本文:
const int two = 2;
switch( i ){
case 1: printf("case 1\n");
case two: printf("case 2\n");
case 3: printf("case 3\n");
default: ;
}
出現這段語句的程式能不能編譯通過呢?
我們測試一下:
#include <stdio.h> int main() { int i; const int two = 2; printf("Enter the number of i: "); scanf("%d", &i); switch( i ) { case 1: printf("case 1\n"); break; case two: printf("case 2\n"); break; case 3: printf("case 3\n"); break; default: ; } return 0; }
編譯,執行,提示如下錯誤:
case label does not reduce to an integer constant|
如果把語句: const int two = 2; 改成:#define two 2的話,就沒有錯誤,這就說明了const 關鍵字並不真正表示常量。
不要以為在變數定義的前面加上const就會把變數變成常量,上例也說明了這個問題,並不能成功。
const的用法是:
在一個符號前加上const限定符只是表示這個符號不能再被賦值,也就是改變當前值,也就是它的值對於這個符號來說是隻讀的。
const最有用之處就是用它來限定函式的形參,這樣函式將不會修改實參指標所指向的資料。
const可以用在資料上,如:
const int limit = 10;
但當你把const 和指標操作符(間接操作符*)一起使用時,就有點難度且更有意思了。
這裡給出一個例子:
const int *limitp = &limit;
int i = 27;
limitp = &i;
分析:第一條語句的意思是limitp這個指標指向的值被限定為const,不能改變了,只能訪問,但是指標本身是可以改變的,這樣執行第2、3條語句,該指標就指向了不同的地址,對它進行間接訪問操作就可以得到一個不同的值了。
const 和 * 的組合通常只用於在陣列形式的引數中模擬傳值呼叫。它聲稱“我給你一個指向它的指標,但你不能修改它。”