c++的乙個很明顯的特性就是指標。指標正是c++強大的原因,同時也會他比較難的乙個原因。
這裡簡單介紹下c++中指向常量的指標、常指標和指向常量的常指標的概念。
一、指向常量的指標:
定義方法
const
int* ptr;
intconst
*ptr;
那麼什麼是指向常量的指標呢?
簡單來說,就是指標指向的內容是常量,不可變,但是指標本身的值可以變(也就是說指標可以指向同型別的其他常量)。
下面看乙個例子:
const
double pi =
3.14
;// pi是乙個常量,不能改變它的值
const
double
* cptr =
π//cptr指向pi,注意這裡的const不能丟,因為普通指標不能指向常量物件,即,不能用非const變數初始化指向常量的指標.
*cptr =
3.69
;//錯誤,試圖改變所指物件的值。不能改變指標所指物件的值
cout <<
*cptr << endl;
//輸出pi的值
//雖然不能改變其所指物件的值,但是它可以指向別的常量物件
cosnt double pi2 =
6.28
;cptr =
&pi2;
//正確 *cptr為6.28
cout <<
*cptr << endl;
const
char
* ptr =
"hello , world"
;//字串常量的內容不可變
二、常指標:
常指標和上面指向常量的指標相反:該指標不允許指向其他地方,但是它裡面的值可以修改。
定義方法
int
*const ptr;
看下面的例子:
int i =42;
int* cosnt p =
&i; //p是乙個const指標
cosnt int i2 =44;
p =&i2;
//錯誤 不能改變p的值
//雖然不能給p賦值,也就是不能改變p的值,但是我們可以改變p所指的物件的內容。比如:
*p =46;
//正確 此時i為46
三、指向常量的常指標:
這種指標自然是結合上面兩個的特性。
定義方法
const
int*
const ptr;
intconst
*const ptr;
這種指標就不列舉具體例子了,需要用的地方直接使用即可。
那麼要怎樣去記憶呢?
這裡給出一種方法:
從右往左讀,遇到p就替換為「p is a」,遇到*就替換為「point to」,其餘不變下面看看具體情況
const int* ptr;
ptr is a point to int const_——ptr是指向int型常量的指標(指向常量的指標)
int const* ptr;
ptr is a point to const int——ptr是指向int型常量的指標(指向常量的指標)
int* const ptr;
ptr is a const point to int——ptr是const 型別的指向int型變數的指標(常指標)
const int * const ptr;
ptr is a const point to int const——ptr是const 型別的指向const int型常量的指標(指向常量的常指標)
int const * const ptr;
ptr is a const point to const int ——ptr是指const 型別的指向const int型常量的指標(指向常量的常指標)
怎麼樣,有木有覺得這樣一來的話就不容易混淆了。
指標常量,常指標,指向常量的常指標
1.指標常量 從字面意思可以看出,指標是乙個常量,也就是位址不能被修改。int const p 特點是指標指向的數值可以改變,然而指標所儲存的位址卻不可以改變。include using namespace std void main int a 10 int const p a cout 我們可以...
指標常量,常指標,指向常量的常指標
1.指標常量 從字面意思可以看出,指標是乙個常量,也就是位址不能被修改。int const p 特點是指標指向的數值可以改變,然而指標所儲存的位址卻不可以改變。include using namespace std void main int a 10 int const p a cout 我們可以...
常指標 指向常量的指標與指向常量的常指標的區分
個人根據一些資料,簡要總結如下 include using namespace std int main 補充 1 constexpr變數簡介 在c 11新標準規定,允許將變數宣告為constexpr型別以便由編譯器來驗證變數的值是否是乙個常量表示式。宣告為constexpr的變數一定是乙個常量,而...