指標的知識重點很多,常量指標和指標常量在程式中會經常出現,並經常會讓人誤解。
(1)常量指標:表述為「是常量的指標」,它首先應該是乙個指標。
(2)指標常量:表述為「是指標的常量」,它首先應該是乙個常量。
常量指標,它是乙個指向常量的指標。設定常量指標指向乙個常量,為的就是防止寫程式過程中對指標誤操作出現了修改常量這樣的錯誤,編譯系統就會提示我們出錯資訊。因此,常量指標就是指向常量的指標,指標所指向的位址的內容是不可修改的。
指標常量,它首先是乙個常量,然後才是乙個指標。指標常量就是不能修改這個指標所指向的位址,一開始初始化指向哪兒,它就只能指向哪兒了,不能指向其他地方了,就像乙個陣列的陣列名一樣,是乙個固定的指標,不能對它移動操作。如果使用p++。系統就會提示錯誤。但是注意,這個指向的地方裡的內容是可以替換的,這和上面說的常量指標是完全不同的概念。總之,指標常量就是指標的常量,它是不可改變位址的指標,但是可以對它所指向的內容進行修改。
下面是四個指標例子:(可以自己先做出判斷)
(1) char * const p1 ;
(2) char const * p2 ;
(3) const char * p3 ;
(4) const char * constp4 ;
如果const位於*號的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;如果const位於*號的右側,const就是修飾指標本身,即指標本身是常量。因此,p1指標本身是常量,但它指向的內容可以被修改。p2和p3的情況相同,都是指標所指向的內容為常量。p4則表示指標本身是常量,並且它指向的內容也不可被修改。
(1)p1是指標常量,它本身不能被修改,指向的內容可以被修改
(2)p2和p3是常量指標,它本身可以被修改,指向的內容不可以被修改
(3)p4本身是常量,並且它指向的內容也不可被修改
如下**,編譯存在錯誤,主要靠對於常量指標和指標常量作用的理解
#include int main()
上面的**中,node1和node2分別是常量指標和指標常量,並且都在初始化時指向了常量字串「abc」。因此,他們對於指向的記憶體進行修改都是非法的,如果是node1操作,會出現編譯錯誤,而node2會出現執行錯誤。
所以綜上,**第8,9,10行出現編譯錯誤;第11行正確;**第14,16行出現編譯錯誤,第13、15行出現執行時錯誤。
指標 常量指標和指標常量
const關鍵字宣告乙個常量,常量宣告後不能修改。類似的,我們可以宣告常量指標 double radius 5 double const pvalue radius pvalue 4 可以修改其中pvalue是乙個常量指標,其宣告和初始化必須在同一條語句中,後面的程式不能為其賦予新的位址。注意,雖然...
常量指標 和 指標常量
在c 的學習中,有人經常搞不清楚 常量指標 和 指標常量 這兩個概念。其實簡單一點講,常量指標 所指向的位址上的資料是常量,而 指標常量 所指向的位址是常量,位址上面的資料是可以變化的。常量指標,表述為 是常量的指標 它首先應該是乙個指標。指標常量,表述為 是指標的常量 它首先應該是乙個常量。指標常...
常量指標和指標常量
定義 具有只能夠讀取記憶體中資料,卻不能夠修改記憶體中資料的屬性的指標,稱為指向常量的指標,簡稱常量指標。宣告 const int p int const p 注 可以將乙個常量的位址賦值給乙個對應型別的常量指標,因為常量指標不能夠通過指標修改內粗資料。只能防止通過指標引用修改記憶體中的資料,並不保...