常量指針(pointer to constant)和指針常量(constant pointer)
阿新 • • 發佈:2019-01-11
bsp spa end amp img ostream ace 指針變量 ons
using namespace std; int main() {
int a = 18;
int b = 28;
int c = 58;
//常量指針
const int* ap = &a;
//*ap = 12; //錯誤,因為ap是常量指針,不能通過這個指針改變其實體的值。
cout << *ap << endl;
a = 19; //正確,該實體依然可變。
cout << *ap << endl;
ap = &c; //正確,常量指針可以修改指針值。
cout << *ap << endl; //指針常量
int* const bp = &b;
cout << *bp << endl;
*bp = 12; //正確,指針常量可以通過指針改變其實體的值。
cout << *bp << endl;
//bp = &a; //錯誤,指針常量不能改變指針值。 //常量指針常量
const int* const cp = &c;
//*cp = 33; //錯誤,常量指針常量不能通過該指針修改其實體的值。
//cp = &b; //錯誤,常量指針常量不能修改其指針值。
c = 57; //給實體的可變性沒變。
cout << *cp << endl;
} 結果如下:
一個指針可以操作兩個實體,一個是指針值(即地址),一個是間訪值(即指向的實體)。於是指針的常量性也分為兩種:常量指針(pointer to constant)和指針常量(constant pointer)。
指針常量是相對於指針變量而言的,也就是指針值不能修改的指針。常量指針是指向常量的指針的簡稱。
定義指針常量還是常量指針就看const修飾,若const修飾指針本身,則為指針常量,若修飾指針類型(指向的實體的類型),則為常量指針。
常量指針:const int* ip=&a;
指針常量:int* const cp=&b; 或 int const* dp=&b;
常量指針常量:const int* const icp=&c;
常量指針不能通過該指針改變地址空間的值,但並沒有限制地址空間的課改變性。因為一個地址空間可能不止一個指針指向它,所以可以通過其他指向它的指針改變它的值。
指針常量是相對於指針變量而言,就是這個指針成了常量,不能使這個指針指向其他地址空間,但可以通過該地址改變其地址空間內的值。這樣說好像也不太明白,直接看例子:
#include <iostream>using namespace std; int main() {
int a = 18;
int b = 28;
int c = 58;
//常量指針
const int* ap = &a;
//*ap = 12; //錯誤,因為ap是常量指針,不能通過這個指針改變其實體的值。
cout << *ap << endl;
a = 19; //正確,該實體依然可變。
cout << *ap << endl;
ap = &c; //正確,常量指針可以修改指針值。
cout << *ap << endl; //指針常量
int* const bp = &b;
cout << *bp << endl;
*bp = 12; //正確,指針常量可以通過指針改變其實體的值。
cout << *bp << endl;
//bp = &a; //錯誤,指針常量不能改變指針值。 //常量指針常量
const int* const cp = &c;
//*cp = 33; //錯誤,常量指針常量不能通過該指針修改其實體的值。
//cp = &b; //錯誤,常量指針常量不能修改其指針值。
c = 57; //給實體的可變性沒變。
cout << *cp << endl;
} 結果如下:
常量指針(pointer to constant)和指針常量(constant pointer)