當(dāng)使用帶有指針的const是,有兩種選擇:const修飾指針正指向的對(duì)象,或者const修飾在指針里存儲(chǔ)的地址。這些語(yǔ)法容易使人混淆,但實(shí)踐之后就好了。
1.指向const的指針
const int* u;
u是一個(gè)指針,它指向一個(gè)const int,這里不需要初始化,因?yàn)閡可以指向任何標(biāo)識(shí)符(也就是說(shuō),它不是一個(gè)const),但它所指的值是不能被改變的。
對(duì)于
int const* u;
其效果與上面的定義完全一樣,u是一個(gè)指向恰好是const的int的普通指針。但第一種可讀性更強(qiáng)。
2.const指針
使指針本身成為一個(gè)const指針,必須把const標(biāo)明的部分放在*的右邊,如:
int d = 1;
int* const w = &d;
w是一個(gè)指針,這個(gè)指針是指向int的const指針。因?yàn)橹羔槺旧憩F(xiàn)在是const指針,考試,大提示編譯器要求給它一個(gè)初始值,這個(gè)值在指針生命期內(nèi)不變。然而要改變它所指向的值是可以的,可以寫(xiě)
*w = 2;
可以使用下面兩種合法形式中的任何一種把一個(gè)const指針指向一個(gè)const對(duì)象:
int d = 1;
const int* const x = &d;
int const* const x = &d;
現(xiàn)在,指針和對(duì)象都不能改變。
測(cè)試一下:
#include
using namespace std;
int main()
{
int a = 1;
int b = 2;
const int* u;
u = &a;
//*u = 4; //非法
cout<<*u< int* const v = &b;
//v = &a; //非法
*v = 6;
cout< int d = 1;
const int* const x = &d;
int const* const x2 = &d;
return 0;
}
1.指向const的指針
const int* u;
u是一個(gè)指針,它指向一個(gè)const int,這里不需要初始化,因?yàn)閡可以指向任何標(biāo)識(shí)符(也就是說(shuō),它不是一個(gè)const),但它所指的值是不能被改變的。
對(duì)于
int const* u;
其效果與上面的定義完全一樣,u是一個(gè)指向恰好是const的int的普通指針。但第一種可讀性更強(qiáng)。
2.const指針
使指針本身成為一個(gè)const指針,必須把const標(biāo)明的部分放在*的右邊,如:
int d = 1;
int* const w = &d;
w是一個(gè)指針,這個(gè)指針是指向int的const指針。因?yàn)橹羔槺旧憩F(xiàn)在是const指針,考試,大提示編譯器要求給它一個(gè)初始值,這個(gè)值在指針生命期內(nèi)不變。然而要改變它所指向的值是可以的,可以寫(xiě)
*w = 2;
可以使用下面兩種合法形式中的任何一種把一個(gè)const指針指向一個(gè)const對(duì)象:
int d = 1;
const int* const x = &d;
int const* const x = &d;
現(xiàn)在,指針和對(duì)象都不能改變。
測(cè)試一下:
#include
using namespace std;
int main()
{
int a = 1;
int b = 2;
const int* u;
u = &a;
//*u = 4; //非法
cout<<*u<
//v = &a; //非法
*v = 6;
cout< int d = 1;
const int* const x = &d;
int const* const x2 = &d;
return 0;
}

