c 常量指標和指標常量區別

2021-09-18 06:45:31 字數 2144 閱讀 1051

const double *cptr;
這裡的cptr是乙個指向double型別const物件的指標,const限定了cptr指標所指向的物件型別,而並非cptr本身。也就是說cptr本身並不是const。在定義時不需要對它進行初始化,如果需要的話,允許給cptr重新賦值,使其指向另乙個const物件。但不能通過cptr修改其所指物件的值:

*cptr=40;//報錯,*cptr應該是const型別
const double pi=3.14;

double *ptr=π//報錯:ptr是乙個普通指標

const double *cptr=π//ok: cptr是乙個指向const物件的指標

const int universe=40;

const void *cpv=&universe;//ok

void *pv=&universe;//報錯:universe是const常量

允許把非const物件的位址賦給指向const物件的指標,例如:

double dval=3.14;

const double *cptr=&dval;//ok:但是不能通過cptr來修改dval的值

儘管dval不是const物件,但任何企圖通過指標cptr修改其值的行為都會導致編譯時的錯誤。cptr一經定義,就不允許修改其所指向物件的值。如果該指標恰好指向非const物件時,同樣必須遵循這個準則。

然而,事實是可以修改const指標所指向的值,這一點嚐嚐容易引起誤會。

double dval=3.14159;

const double *cptr=3.14159;//報錯:cptr是指向const物件的指標

const double *cptr=&dval;//ok: 允許把非cosnt物件的位址賦給指向const物件的指標

double *ptr=&dval; //ok:ptr指向dval

*ptr=2.72;//ok: ptr是普通指標可以修改

cout<<*cptr《在上例中,指向const的指標cptr實際上指向了乙個非const物件。儘管它所指的物件並非const,但仍不能使用cptr修改該物件的值。本質上說,由於沒有方法分辨cptr所指的物件是否為const,系統會把它所指的所有物件都視為const。

如果指向const的指標所指向的物件並非const,則可直接給該物件賦值或間接地利用普通的非cosnt指標修改其值:畢竟這個值不是const。只要的是要記住:不能保證指向const物件指標所指物件的值一定不可以修改。

在實際的程式中,指向const的指標常用作函式的形參。將形參定義為指向const的指標,以此確保傳遞給函式的例項物件在函式中不因為形參而被修改。

除指向const物件的指標外,c++語言還提供了const指標——本身的值不能修改:

int errnumb=0;

int *const curerr=&errnumb;//指標curerr是乙個常量

上述定義語句讀作 curerr是指向int型物件的const指標。與其他const量一樣,const指標的值不能修改,這就意味著不能使curerr指向其他物件。任何企圖給const指標賦值的行為都會導致編譯時的錯誤。並且與任何const量一樣,const指標也必須在定義時初始化。

當然儘管指標本身是const的事實並沒有說明是否能使用該指標修改它所指向物件的值。指標所指物件的值能否修改完全取決於該物件的型別。例如curerr指向乙個普通的非常量int型物件errnumb,則可使用curerr修改該物件的值:

if(*curerr)
定義如下:

const double pi=3.14159;

const double *const pi_ptr=π

本例中,既不能修改pi_ptr所指向物件的值,也不允許修改該指標的指向(即pi_ptr中存放的位址值)。讀作pi_ptr首先是乙個const指標,其指向double型的const物件。

下面給出乙個c++上的例子:

#includeusing namespace std;

int main()

C 常量指標和指標常量的區別

首先是乙個常量,其次該常量是個指標。因為是乙個指標型別的常量,所以定義時必須初始化乙個變數的位址,且始終指向該位址不能被更改即只能賦值一次,但位址中存放的內容可以被更改。通過以下例子了解指標常量的特性 int a,b int const p a 指標常量初始化 p 10 操作成功,指標常量所指位址的...

C 之指標常量和常量指標區別

總結int a 1 整型變數 const int b 2 常量 intconst b 2 這裡定義和上面定義是乙個意思,建議按照上面的規範寫 int p 普通整型指標 p a 另一種形式,意思與上兩句定義完全一樣,只是為了和指標常量對比 int p a p 2 可以更改指標指向變數的值,相當於變數a...

區別 指標常量 指標變數 常量指標和常量指標常量

1.指標變數 指標值 即指標的指向 可以改變的指標,只能指向變數 2.指標常量 指標值 即指標的指向 不能改變的指標,只能指向變數,但可以修改指向的實體變數的值 3.常量指標 指向常量的指標,所以不能修改指向的實體的值,但可以修改指標的指向 即可以指向別的常量,必須是常量 4.常量指標常量 指向常量...