假設有一個ptr指針, 它保存變量vb2的地址:
Type * ptr = &vb1
當使用指針時,會涉及兩個對象:指針本身 及 它所指向的對象。 這意味着 對const 可採用以下 三種保護層次:
1. 確保ptr無法指向其它內存位置
Type * const ptr = &vb1
2. 確保 無法通過ptr 來改變 vb1的值:
const Type * ptr = &vb1
3. 兩者都保護:
const Type * const ptr = &vb1
示例代碼:
#include <iostream>
using namespace std;
int main() {
int m1 = 12, m2 =13;
const int* n1 = &m1;
int* const n2 = &m2;
cout<<"*n1="<<*n1<<endl;
//*n1 = 10; //error: n1現在所指內容是隻讀的,通過n1想改變m1的值 是不行的。
n1 = &m2; //ok: n1可以指向另一個位置
// *n1 = 11; //ereor: 通過n1 改變m2的值,仍然不行。
cout<<"*n1="<<*n1<<endl;
//n2 = &m1; //error : n2 裏面放的是常量,是m2的地址,只能指向m2
cout<<"*n2="<<*n2<<endl;
*n2 = 100; //ok: n2所指向的位置重新賦值可以,也就是 對m2重新賦值
cout<<"*n2="<<*n2<<endl;
cout<<"m2 = "<<m2<<endl;
return 0;
}
運行結果:
*n1=11 *n1=13
*n2=13
*n2=100 m2 = 100