C++中的const *與 * const:深入解析與區(qū)分
在C++編程中,指針與const關(guān)鍵字的組合常常引發(fā)初學(xué)者的困惑。特別是當(dāng)看到const int和int* const這兩種聲明時,很多人會感到迷惑不解。本文旨在深入解析這兩種聲明的含義,幫助讀者準(zhǔn)確區(qū)分它們。
一、const int*(指向常量的指針)
首先,我們來看const int*這種聲明。這里,const修飾的是int,即指針?biāo)赶虻膬?nèi)容是不可變的。換句話說,這個指針可以指向不同的const int對象,但它不能修改任何它所指向的對象的值。
示例代碼:
const int a = 10;
const int b = 20;
const int* p = &a; // 正確,p指向常量a
cout << "p指向的值:" << *p << endl; // 輸出a的值,即10
p = &b; // 正確,p可以重新指向另一個常量b
//*p = 30; // 錯誤!不能通過p修改它所指向的值
二、int* const(常量指針)
接下來,我們分析int* const這種聲明。在這里,const修飾的是指針本身,而不是它所指向的內(nèi)容。這意味著這個指針在初始化后就不能再指向其他對象了,但它可以修改它所指向?qū)ο蟮闹担ㄇ疤崾窃搶ο蟊旧聿皇浅A浚?/p>
示例代碼:
int x = 100;
int y = 200;
int* const q = &x; // 正確,q是一個常量指針,初始化為指向x
cout << "q指向的值:" << *q << endl; // 輸出x的值,即100
//*q = 150; // 如果x本身不是const,則這里是正確的,現(xiàn)在*q(即x)的值為150
//q = &y; // 錯誤!常量指針q不能再指向其他對象
注意,在上述代碼中,我們修改了q所指向的值(即*q = 150;),這是允許的,因為q是一個指向int的常量指針,而不是指向const int的指針。但是,我們嘗試讓q指向另一個對象(即q = &y;),這是不允許的,因為q本身是一個常量指針。
三、總結(jié)與區(qū)分
要區(qū)分const int和int* const,關(guān)鍵在于理解const修飾的是誰。如果const在類型(如int)之前,那么它修飾的是指針?biāo)赶虻膬?nèi)容;如果const在指針符號*之后,那么它修飾的是指針本身。
- const int* p:p是一個指針,它可以改變指向,但不能修改它所指向的內(nèi)容。
- int* const q:q是一個常量指針,它指向的內(nèi)容可以改變(如果內(nèi)容本身不是常量),但q本身不能改變指向。
通過理解這兩種聲明的含義和用途,我們可以更加準(zhǔn)確地使用指針和const關(guān)鍵字,編寫出更安全、更可靠的C++代碼。