上一篇介紹完指針的聲明和運算後,這一篇來說說幾個常見且重要的指針概念。
這兩個概念也是如影隨形般存在,像兩個連著的詞,通常前面的詞是修飾部分,後面的詞則是中心詞。
常量指針,它是一個指向常量的指針。常量指針指向一個常量,是防止對指針誤操作出現修改常量這樣的錯誤,該指針指向的地址的內容是不可修改的。指針常量,它首先是一個常量,然後才是一個指針。指針常量不能修改指針所指向的地址,一旦初始化完成,指向的地址就固定了,不能對其進行移動操作。
這是兩個不同的概念。指針數組,即數組的元素是指針形成;數組指針,即指向數組的指針。
這也是兩個容易混淆的概念,尤其在它們一起出現的時候。
指針函數是指帶指針的函數,即本質是一個函數,並且返回的是某一類型的指針。其定義如下:
返回類型標識符 *返回名稱(形式參數表){ 函數體 }
實際上,每一個函數,即使它不帶有返回類型的指針,也會有一個入口地址,而該地址相當於一個指針,指向返回值的地址。這個指針此時相當於函數本身,即整個函數相當於一個“變量”。
函數指針則是指向函數的指針變量,因而它首先是指針變量,只不過該指針變量指向函數。有了指向函數的指針變量後,就可以像指針變量引用其他類型變量一樣調用函數。
野指針一般指代碼沒有很好控制的指針。當程序裡定義了一個指針而又沒有給該指針一個具體地址指向時,這個指針會隨意地指向一個地址,這樣的指針就是一個野指針。如果這個地址後面的內存空間沒有什麼重要的數據則不會造成嚴重後果,但是一旦裡面存放了有用的數據,那麼這些數據隨時都有被野指針存取的危險,此時數據就會被破壞。因此在程序裡應該禁止野指針的存在。