int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的區別,consconst
加有const關鍵字的幾種情況的辨析
const修飾的代碼 |
含義(特點) |
等價性 |
int *p = # |
1. 可以讀自己 2. 可以通過*p改自己 3. 可以通過p = &data來看別人 |
許可權最大 |
cons int *p = # |
1、const放在左邊意味著指向的是常量,這個常量不可以修改, 2、p = &data; (地址可以修改) 3、*p = 30;(這個時候是錯誤的) |
這兩者等價(應用:查看別人的賬戶) |
int const *p = # |
(和上面的等價)限定只能讀不可以修改,地址可以移動 |
int * const p = # |
不可以修改自己的地址,但是可以通過*p來修改自己的值 |
|
const int * const p = # |
不可以修改地址來看其它的值,也不可以修改自己的,只能看自己的 |
1、可看自己 2、不改自己 3、不能看別人 |
int const * const p = # |
限定只能看自己的賬戶,只能讀不可寫 |
只能在初始化的時候才能夠賦值(const限定了不能隨便修改變數)
const總結
const在’*’左邊意味著我指向的是常量。
const在’*’右邊意味著我指標式一個常量。
當把上面的p=&data;改成了*p = 3;這個時候就不可以了。如下:
int const *p
int * const p; 不可以修改自己的地址,但是可以通過*p來修改自己的值
可以通過*p的方式進行修改
6.const int * const p = &data;這種方式只能看自己的,不能修改別人的,也不能改變自己。
只能看自己:
const int * p p = 5 int * const p *p = 5 的不同
const int * p定義的是(const int)型的指標,指向的是int型的常量,指向的值不能改。
int * const p定義的是 const的指標,它的指向不能改。
你試試這個程式報錯的都是那幾行就知道了。
void main()
{
int a = 5,b = 6;
const int * p1 = &a;
int * const p2 = &a;
(*p1)++;//錯,p1指向的是常量,值不能變
(*p2)++;
p1 = &b;
p2 = &b;//錯,p2是常量指標,其指向不能變
}
int const *p 與int *const p 一樣
不一樣。
前者表明指向的對象是const型,不可以修改,但是指標p的指向可以修改;
後者表明指標變數p是const型,它的指向不可修改,但是指向的對象可以修改。