1、指針常量(*const):對應指針變量,即指針本身是常量,指針指向的内容可以被修改。
- 資料類型 * const 指針變量=變量名(或取位址);
2、常量指針(const*):常量的指針,即指針指向的内容不能被修改,但指針本身是變量,可以被修改。
- 資料類型 const * 指針變量=變量名(或取位址);
int const* p;
const int* p;//都可以
3、指向常量的指針常量:即指針本身是常量,指向的内容也是常量,都不能修改。
-const 資料類型 * const 指針變量=變量名(或取位址);
4、數組名
指針和數組名在本質上是不同的, 1,指針是位址變量,而數組名是位址常量
- 數組名本質上是一個位址常量,不是指針,不管是指針常量還是常量指針都不是,之是以在實際程式設計中,數組名表現出“是”指針的樣子,那是因為經過隐式轉換形成的,而不是數組名本身具有的
-
指針與位址的差別:
1、指針和位址最大的差別就是指針是有類型的,位址是沒有類型的。我們當然可以通過絕對位址的方式找到函數和資料,但是位址是沒有類型的,不能對位址進行算術操作,在涉及諸如數組等操作時就不能通過位址的自增和自減來通路數組的各個變量。
2、指針是由位址和類型兩部分構成的,指向資料的指針不僅記錄該資料的在記憶體中的存放的位址(即指針的值),還記錄該資料的類型(即指針的資料類型),即在記憶體中占用幾個位元組(但不同類型的指針大小是相同的通用是4個位元組,32位,在64位作業系統下可以是8個位元組),這是位址所不具有的。
注:指針就像一個容器,可以存放位址。性質上和變量與數值的關系差不多。指針是變量類型,它的值是位址,它作為變量是可以變化的(指針常量除外)位址是一個數值而已(記憶體中特定的區域,可以簡單想象成門牌号,引用也有此味道,但各有差別,這裡隻是友善記憶打的比喻)