2012年2月1日 星期三

C語言- const 用法

const為constant的縮寫,用來宣告變數並設定初值後「不能」再被修改。
ex. const double = 3.14;

const在指標(pointer)使用中可以表明指標指到data是const or 指標本身是const or 兩者都是

[1] char *p = "Qoo";  /* non-const pointer, non-const data */
[2] const char *p = "Qoo"; /* non-const pointer, const data */
[3] char* const p = "Qoo"; /* const pointer, non-const data */
[4] const char* const p = "Qoo" /* const pointer, const data */

關鍵在於:*與const的前後關係!當const出現在*的左邊(const *),則表示pointer指到的data為常數;反之如果const出現在*的右邊(* const),則表示指標本身是常數

所以在[2]
*p = 10;       /*錯誤*/
*(p + 2) = 1;  /*錯誤*/

在[3]
*p = 2;          /*可以*/
*(p+1) = 10;     /*可以*/
p++;             /*不可以*/

事實上,在The C++ Programming Language中有提到一個簡單的要訣:由右向左讀!!

所以
[2] p is a pointer that point to char, which is const
[3] p is a constant pointer point to char
[4] p is a constant pointer point to char which is const

用const是其中一種固定變數值的方法,但更常用的是用#define。一來可以讓程式碼簡潔,二來可以配合macro,用一個簡單的指令替代多個步驟

References:
[1] Effective C++ clause 21.
[2] http://www.wretch.cc/blog/cwz0205/15360838

沒有留言:

張貼留言