const關鍵字是嵌入式程式設計師必須熟悉的。因為它的使用可以增加程式的健壯性,並且使讀者更好地理解程式。
它所修飾的變數被叫做「唯讀變數」。注意「唯讀變數」!=「常量」。千萬不要說被const所修飾的變數就是常量!那只能說明你對const還不太理解!下面就讓我們來分析一下const。
首先看以下定義:
const int a = 3;
int const a = 3;
const char b = '1';
char const b = '1';
const char s = "123456789";
char const s = "123456789";
這裡const的位置對變數沒有影響。有了const的修飾,以上的變數就表示唯讀的,如果在編譯過程中想要改變以上變數的內容,那麼編譯器就會報錯。知道了這點,我希望以後大家在寫程式時在能加const的地方都加上,這樣你的程式會更加完美的!
在我的經驗裡,經常在函式的引數裡加const,就是說明這個引數是唯讀的。例如我定義以下函式(功能是求字串長度):
int strlen(const char *s);
顯然傳入的引數s的內容是不能被改變的,因為一旦被改變,長度就可能返回乙個錯誤值。加上const就非常有效地避免了這一點!
這裡還有乙個問題,如果我把以上函式這樣定義對不對呢:
int strlen(char* const s);
答案是:不對!!!可能有人就要問為什麼不對啊?const的位置對變數沒有影響啊!我要說的是const的位置對普通變數是沒有影響,但是對指標變數有著嚴重的影響!!下面讓我們來分析一下這種影響:
const char *s1 = "11111"; (1)
char const *s2 = "22222"; (2)
char* const s3 = "33333"; (3)
分析指標變數時,我們關鍵要看const後面的內容。
(1)式const後面是*s1,即它修飾了*s1的內容,也就是說s1指標所指的內容是不可以被改變的!!但是s1本身可以被改變。舉個例子大家就清楚了:
const char *s1 = "11111";
char *p = "aaaaa";
s1[1] = '2';(這裡會編譯錯誤)
s1 = p;(這裡編譯正確)
s1[1] = '3';(這裡也編譯錯誤)
即s1所存的位址是可以改變的,但是該位址指向的內容是不能改變的!
(2)式和(1)式是一樣用法的。因為const後面都是*s2,*s1.
但是(3)式就不一樣了,因為const後面是s3, s3也是乙個指標,但是const修飾的是s3,不是*s3,所以它是內容可以變,但是s3本身不能變!即s3指向的位址不可以被改變,但是內容可以變。這正好與上面的兩個式子意義相反。
ok,到這裡const大家應該就會用了吧?記住,const修飾指標時一定要注意const修飾的是什麼!
0 給主人留下些什麼吧!~~
C語言關鍵字之const
目錄前言 1.const功能 2.const例項 2.1 const修飾乙個變數 2.2 const修飾指標變數 2.3 函式形參被const修飾 初學c語言時,對於const關鍵字的理解僅僅停留在 不可改變 這一層意思上。本文總結一下const關鍵字在各種情況下的使用方法,及其功能。後續如果遇到新...
C語言關鍵字 Const
c中const的使用 雖然這聽起來很簡單,但實際上,const的使用也是c語言中乙個比較微妙的地方,微妙在何處呢?請看下面幾個問題。問題 const變數 常量 為什麼下面的例子在使用乙個const變數來初始化陣列,ansi c的編譯器會報告乙個錯誤呢?const int n 5 int a n 答案...
C語言關鍵字const
const 是constant的縮寫,只要有變數前面用const修飾,就意味著該變數裡面的資料是readonly。const可以修飾基本型別,構造型別,指標,等。const int a 10 去掉int a 的值不變 int const a 10 去掉int a的值不變 const int a 10...