在C++的學習中,有人經常搞不清楚“常量指針”和“指針常量”這兩個概念。其實簡單一點講,“常量指針”所指向的位址上的資料是常量,而“指針常量”所指向的位址是常量,位址上面的資料是可以變化的。
下面看及格簡單的例子,可以說明他們的差別:
第一個
1 void main(){
2 char *str1={"Hello"};
3 char *str2={"Hello World"};
4 char * const ptr1 =str1 ;
5 //指針常量--指針本身是常量,指向的位址不可以變化,但是指向的位址所對應的内容可以變化
6
7 ptr1 =str2; //錯誤 因為這是一個常量指針,改變指向的位址了
8
9 printf("%s \n",*ptr1);
10 }
11
12
13 // 編譯錯誤 error C3892: 'ptr1' : you cannot assign to a variable that is const
14
第二個
7 *ptr1 ='A';// 正确 因為指向的位址的内容是可以變化的
9 printf("%c \n",*ptr1);
12 //輸出 A
13
第三個
4 const char *ptr1 = str1;
5 //常量指針--指向字元串常量,所指向的字元串内容不能變,但是指向的位址可以變化
6
7 ptr1=str2;// 正确 因為指向的位址是可以變化的
9 printf("%s \n",ptr1);
12 //輸出 Hello World
第四個
4 const char *ptr1 = str2;
7 ptr1='A';// 錯誤 因為指向的位址是内容是不可以變化的
9 printf("%c \n",ptr1);
13 //編譯錯誤 error C2440: '=' : cannot convert from 'char' to 'const char *'
相信從上面四個簡單的例子可以看出他們不一樣的地方把,在這裡要請大家注意一下的地方是:
指針常量的申明:const 放在* 和指針名之間 Type * const pointer ;
常量指針的申明:const放在類型說明符之前 const Type *pointer ;