C語言中的常量指標與指標常量

2021-05-23 23:13:07 字數 1383 閱讀 1820

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

(1) const char* p;

(2) char* const p=a;

(3) char* p="abc";

(1)式定義了乙個常量指標,即指向乙個常量的指標,指向的內容是常量,不可修改,放在常量區的,但指標本身可以修改,即*p='b',是非法的,*p是p指向的常量的第乙個字元,是個常量,不能改變的。p=&q這是可以的,指標可以指向不同的位址。

(2)式定義了乙個指標常量,即指標本身是個常量,不可修改,但指標指向的內容可以修改,一開始定義時讓它指向陣列a. *p='b'這是可以的,但p=&b是非法的。

記憶:  const 常量 * 指標,當const 在*之前就是常量指標,而const在*之後,就是指標常量.

const char*p 即char*p是個常量,所以內容是常量。

char* const p; 即指標p是個常量。

(3) char*p定義的是乙個指標變數p,指向字串abc的首位址。這裡特別要注意,在c語言中,(3)式定義的是乙個常量字串,它被放在靜態儲存區的常量區進行儲存,而p是乙個指標變數,放在棧上。如果*p='b',在編譯時能通過,但在執行時就會出現錯誤,因為你試圖去改變常量區的內容。

2. 常量指標與指標常量的例項

#include

#include

#include

#include

int main()

總之,常量指標指的是內容不可變,位址可以改變,即指標可以指向別的位址。而指標常量指的是指標本身不可變,而內容可以修改。

在這裡,要注意兩點:

(1) 如果指標常量指向的是字元指標變數,那麼當修改*p時,原則上能夠修改,在編譯時能通過,而在執行時不能通過,因為它試圖去修改常量區的內容,顯示是非法的。

(2)當指標常量指向乙個另外乙個指標時,當這個指標指向別的內容時,那麼指標常量還是指向原先的內容。

如:char * q="123";

char *q1="456";

char* const p=q;  q=q1;

那麼 p所指向的內容還是123. 指標本身是常量,不可變。

可以這麼理解: p裡面原先放的是q的位址,內容是123,後來q裡面放的是q1的位址,內容是456. 此時p裡面放的仍然是原來的位址,與現在的q無關。

3. 常量指標的應用

常量指標中,字串的值不可修改,在求字串長度時很方便。指標可以操作,但保證了字串的不被修改。

int strlen1(const char* b)

return i;

}char* strcpy1(char*p,const char* q)

*p='/0';

return des;

}在求字串的長度與字串拷貝時特別有用。

C語言中的指標常量與常量指標

很多人糾結過這兩個名詞,也有人寫文章區分兩者的區別。其實很簡單,常量指標和指標常量乙個是指標 乙個是常量。const int p var 與 int const p var 的功能是相同的,都是乙個指向整型常量的指標。指標的數值可以修改,但是當前指標指向的量不可修改。該如何去確認p var的含義呢?...

c語言之常量指標與指標常量

在c c 中用關鍵字const來定義乙個唯讀的變數和物件,它有如下的優點 1.fun const int var 不予許對傳入的引數進行修改,用於保護實參。2.有如有乙個巨集定義,或者類似於靜態變數,const int var2 1573,方便進行修改 3.節省記憶體,const定義只需占用一小塊記...

C 常量指標與指標常量

c 常量指標與指標常量 1.常量指標 形如 int const p 或 const int p,p稱為 常量指標 例1 include using namespace std int main 執行結果 a的值 30 p的值 30 p重新賦值 40 在例1中,可以看到,p可以先宣告再賦值,而且p可以...