- 論壇徽章:
- 0
|
常量指針
常量指針是指向常量的指針,指針指向的內(nèi)存地址的內(nèi)容是不可修改的。
常量指針定義“const int *p=&a;”告訴編譯器,*p是常量,不能將*p作為左值進行操作。但這里的指針p還是一個變量,它的內(nèi)容存放常量的地址,所以先聲明常量指針再初始化是允許的,指針也是允許修改的,例如:
int a=0,b=1;
const int *p; //聲明常量指針p
p=&a; //p指向a
p=&b; //修改指針p讓其指向b,允許
*p=2; //不允許
指針常量
指針常量是指針的常量,它是不可改變地址的指針,但可以對它所指向的內(nèi)容進行修改。
指針常量定義"int *const p=&a;"告訴編譯器,p是常量,不能作為左值進行操作,但允許修改其指向的內(nèi)容,即*p是可修改的。指針常量必須在聲明的同時對其初始化,不允許先聲明一個指針常量隨后再對其賦值,這和聲明一般的常量是一樣的,例如:
int a=0,b=1;
int *const p1=&a;
int *const p2; //不允許,必須對其初始化
p2=&b; //不允許,p2是常量不允許作為左值
*p1=2; //允許修改指針*p1的值
如果指針作為函數(shù)參數(shù),當(dāng)我們不想被調(diào)用函數(shù)隨意修改參數(shù)指針而只是想修改參數(shù)指針指向的內(nèi)容時,我們常把指針常量作為參數(shù)。例如:
有兩個整形變量a,b,我們寫個函數(shù)用于交換a,b的值,利用指針作為形參,函數(shù)修改參數(shù)指針的值是我們不希望的,這時可將參數(shù)設(shè)為指針常量,如果函數(shù)對指針修改編譯是將報錯。
void Exchange(int *const a,int *const b)
{
int temp;
temp=*a;
*a=*b;
*b=temp
}
事實上,如果函數(shù)不修改參數(shù)本身的值,我們一般對參數(shù)加上const限定,這也是提高代碼質(zhì)量的一個小技巧,在類的方法中,如果方法不修改類屬性的值,我們也常將方法加上const。
來源:http://www.fj3344.com |
|