有兩種不同的方式將const關鍵字用於指針:
第一種是指針指向一個常量對象,防止使用該指針修改所指向的值
第二種是將指針本身聲明為常量,防止改變指針指向的位置。
1、 指向一個常量的指針
例如,聲明一個指向常量的指針pt:
int age=23
const int*pt=&age
該聲明指出,pt指向一個const int(這裏為23),因此不能使用pt來修改這個值,即*pt的值為const,不能被修改:
*pt+=1 //不可行
但是pt的聲明並不意味着它指向的值是一個常量,而只是意味着對pt而言這個值是常量,例如:pt指向age,而age不是const,可以直接通過age變量來修改age的值,但不能使用const指針來修改它:
*pt=20 //不可行
age=20 //可行
2、 將const變量的地址賦給指向const的指針是可行的,但將const的地址賦給常規指針是不可行的:
const int age=23
const int*pt=&age //可行
const int age=23
int*pt=&age //不可行
第一種情況禁止使用age來修改值23,也不能使用pt來修改
第二種情況不可行的原因是將常量age的地址賦值給pt。則可以使用pt來修改age的值,這就使得age的const狀態很荒謬,因此C++禁止將const的地址賦給非const指針,如果非要這麼做,只能使用強制轉換來突破這種限制。