1、const的普通用法
const int n = 10;
意思很明顯,n是一個只讀變量,程序不可以直接修改其值。這裡還有一個問題需要注意,即如下使用:int a[n];在ANSI C中,這種寫法是錯誤的,因為數組的大小應該是個常量,而n只是一個變量。
2、const用於指針
const int *p;
int const *p;
int * const p;
在最後的一種情況下,指針是只讀的(即p只讀),而在另外兩種情況下,指針所指向的對象是只讀的(即*p只讀)。const 是一個左結合的類型修飾符,它與其左側的類型修飾符一起為一個類型修飾符,所以,int const 限定 *p,不限定p。int *const 限定p,不限定*p。
這裡有一個簡便的區分方法:沿著*號劃一條線,如果const位於*的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;如果const位於*的右側,const就是修飾指針本身,即指針本身是常量。
3、const用於函數的地址傳遞參數
void foo(const int *p);
這種形式通常用於在數組形式的參數中模擬傳值調用。也就是相當於函數調用者聲稱:"我給你一個指向它的指針,但你不能去修改它。"如果函數編寫者遵循了這個約定,那麼就相當於模擬了值傳遞。這也是const最有用之處了:用來限定函數的形參,這樣該函數將不會修改實參指針所指的數據。這裡注意了,是函數不應該去修改而不是不能修改,也就是說const不能阻止參數的修改(原因見上)。
4、const用於限定函數的返回值
const int foo();
const struct mytype foo();
上述寫法限定函數的返回值不可被更新,當函數返回內部的類型時,已經是一個數值,當然不可被賦值更新,所以,此時const無意義,最好去掉,以免困惑。當函數返回自定義的類型時,這個類型仍然包含可以被賦值的變量成員,所以,此時有意義。
本文出自 “孫轲的技術博客” 博客,請務必保留此出處http://sunke.blog.51cto.com/4812218/1282573