常量指標與指標常量

2021-07-25 07:29:59 字數 1052 閱讀 9538

指標常量與常量指標是c語言中兩個比較容易混淆的概念。

如下面三個例子:

(1)const char *p;

(2)char * const p = a;

(3)cahr * p = "abc";

語句(1)定義了乙個常量指標,即指向乙個常量的指標,指向的內容是常量,不可修改,放在常量區的,但指標本

身可以被修改,即「*p = 'b'」是非法的。

*p 是p指向的常量的第乙個字元,是個常量,不能改變的。「  p = & q」 這是可以的,指標可以指向不同的位址。

語句(2)定義了乙個指標常量,即指標本身是個常量,不可以被修改,但指標指向的內容可以被修改,一開始定義

時讓它指向陣列a,「*p = b"這是可以的,但」 p = &b「是非法的。

注意:const 常量*指標,當const在*之前就是常量指標,在*之後就是指標常量。例如:」const char *p「即 char*p 是個常量,

所以內容是常量,」char * const p"

即指標p是個常量。

語句(3)中"char *p"定義的是乙個指標變數怕,指向字串abc的首位址。這裡特別要注意,在c語言中,(3)中定

義的是乙個變數字串。

它被放在靜態儲存區的常量儲存區儲存,而p是乙個指標變數,放在棧上。如果「*p = 'b'"在編譯時能通過,但是在執行

時就會出現錯誤,因為你試圖去改變常量區的內容。

總之常量指標指向的內容不可變,單位址可以改變,即指標可以指向別的位址;

而指標常量是指指標本身不可變,而內容可以改變,在這裡要注意兩點:

1.如果指標常量指向的是字元指標變數,那麼當修改*p時原則上能夠修改,在編譯時能通過,但在執行時不能通過,

因為它試圖去修改變數區的內容,顯示是非法的。

2.當指標常量指向另乙個指標時,當這個指標指向別的內容時,那麼指標常量還是指向原來的內容。例如:

char * q = "123";

char * q1 = "456";

char * const p = q;

q = q1;

p指向的內容還是123。

指標常量與常量指標

指標常量與常量指標 指標常量是指定義的指標只能在定義的時候初始化,之後不能改變其值,格式如下 資料型別 const 指標常量名稱 例項如下 1char constp1 2int constp2 const 位於指標宣告符 的右側,這說明宣告的物件是乙個常量,而物件的資料型別是指標。所以第一句定義了乙...

常量指標與指標常量

首先,我告訴大家乙個小規則,就是像這樣連著的兩個詞,前面的乙個通常是修飾部分,中心詞是後面乙個詞,怎麼說呢。就像這裡的常量指標和指標常量。常量指標,表述為 是常量的指標 它首先應該是乙個指標。指標常量,表述為 是指標的常量 它首先應該是乙個常量。我再分開細細說明,常量指標,它是乙個指標,什麼樣的指標...

常量指標與指標常量

在c c 面試中經常會考到常量指標和指標常量,對初學者來說經常會分不清楚,參考網路上的資料,重新學習 記錄一下。常量指標 指向常量的指標,即指向的內容為常量,不可更改,但指標自身的值可以修改。常量指標常量 指標指向的內容不可改變,指標本身的值也不能改變。int a 3 int b 4 const i...