常量指標 和 指標常量

2021-06-21 11:34:51 字數 1814 閱讀 9115

在c++的學習中,有人經常搞不清楚「常量指標」和「指標常量」這兩個概念。其實簡單一點講,「常量指標」所指向的位址上的資料是常量,而「指標常量」所指向的位址是常量,位址上面的資料是可以變化的。

常量指標,表述為「是常量的指標」,它首先應該是乙個指標。

指標常量,表述為「是指標的常量」,它首先應該是乙個常量。指標常量定義時必須初始化,否則報編譯錯誤,因為此時不賦值便沒有機會賦值了.

下面看及格簡單的例子,可以說明他們的區別:

第乙個void main();

char *str2=;

char * 

const ptr1 =str1 ; //

指標常量--指標本身是常量,指向的位址不可以變化,但是指向的位址所對應的內容可以變化

ptr1 =str2; 

//錯誤 因為這是乙個指標常量,改變指向的位址了

printf("%c \n",*ptr1); }

//編譯錯誤    error c3892: 'ptr1' : you cannot assign to a variable that is const    

第二個void main()

;char *str2=;

char * const ptr1 =str1 ;

//指標常量--指標本身是常量,指向的位址不可以變化,但是指向的位址所對應的內容可以變化

*ptr1 ='a';

//錯誤,

顯示記憶體錯誤,因為「hello」為常量,不得修改,意即指標常量中,指標不得改,常量也不得改(#add)

//   char *p = "abc";與

//   const char* p = "abc";等價

//如需要不出錯,應該樣初始化 char str1[6] = "hello",

即用陣列,而不能用字串常量

printf("%c \n",*ptr1); }

第三個void main();

char *str2=;

const

char *ptr1 = str1; //

常量指標--指向字串常量,所指向的字串內容不能變,但是指向的位址可以變化

//相當於在此處將前邊的str1 追加定義為常量

ptr1=str2;

//正確 因為指向的位址是可以變化的

printf("%s \n",ptr1); }

//輸出 hello world

第四個void main();

char *str2=;

const

char *ptr1 = str2; //

常量指標--指向字串常量,所指向的字串內容不能變,但是指向的位址可以變化

ptr1='a';

//錯誤 因為指向的位址是內容是不可以變化的

printf("%c /n",ptr1); }

//編譯錯誤    error c2440: '=' : cannot convert from 'char' to 'const char *'

相信從上面四個簡單的例子可以看出他們不一樣的地方把,在這裡要請大家注意一下的地方是:

指標常量的申明:const 放在* 和指標名之間 type* const     pointer ;

常量指標的申明:const放在型別說明符之前 const type*     pointer ;

實際分兩部分:  type* 為指標 const為常量  自由組合便成為指標常量,常量指標

(修正為 本質上看 * const兩部分, *代表指標,const代表常量,)

常量指標、指標常量判斷原則const * ,* const,也就是const 和*先後順序判斷。

指標 常量指標和指標常量

const關鍵字宣告乙個常量,常量宣告後不能修改。類似的,我們可以宣告常量指標 double radius 5 double const pvalue radius pvalue 4 可以修改其中pvalue是乙個常量指標,其宣告和初始化必須在同一條語句中,後面的程式不能為其賦予新的位址。注意,雖然...

常量指標和指標常量

定義 具有只能夠讀取記憶體中資料,卻不能夠修改記憶體中資料的屬性的指標,稱為指向常量的指標,簡稱常量指標。宣告 const int p int const p 注 可以將乙個常量的位址賦值給乙個對應型別的常量指標,因為常量指標不能夠通過指標修改內粗資料。只能防止通過指標引用修改記憶體中的資料,並不保...

常量指標和指標常量

由於我對常量指標和指標常量的宣告格式經常性混淆,今天特別在codeblocks和vs2010上分別試了一下,慶幸的是還好兩個編譯環境上的結果是一致的。1 什麼是常量指標和指標常量 常量指標 即為乙個指向常量的指標,指標可以修改能夠指向其它的物件,指標指向的變數不能修改其值。指標常量 即為指標是常量,...