可用三種不同的方式將 const 關鍵字用于一級指標,如下所示:
//方式一:指向常量資料的指標,以下幾種為等效表示
const int * ptc; //方式一
int const * ptc; //方式二
//方式二:指標本身為常量,需在宣告時初始化
int x = 55;
int * const cpt = &x;
//方式三:指向常量資料且本身也為常量的指標,需在宣告時初始化,以下幾種為等效表示
int x = 55;
const int * const cptc = &x; //方式一
int const * const cptc = &x; //方式二
在 Microsoft Visual Studio 中連續多個 const 會被編譯器解釋成一個,即 const const const const int 與 const int 等效,除此之外,const int const 在 Microsoft Visual Studio 中也與 const int 等效,
以上三種型別指標的特性如下:
- 型別為
const int *的指標ptc表示*ptc為常量,不能用該指標修改所指物件的值,但可修改其所指向的地址(指標自身的值),可將int或const int資料的地址、int *或const int *型別的指標、以及int * const或const int * const型別的指標賦給ptc(接受資料或指標修飾為const或非const), - 型別為
int * const的指標cpt表示cpt為常量,能用該指標修改所指物件的值,但不可修改其所指向的地址(指標自身的值),只能將int資料的地址 、int *型別的指標、以及int * const型別的指標賦給cpt(只接受資料修飾為非const),且必須在宣告時初始化, - 型別為
const int * const的指標cptc表示*cptc和cptc都為常量,不能用該指標修改所指物件的值,也不可修改其所指向的地址(指標自身的值),和const int *型別的指標一樣,可將int或const int資料的地址、int *或const int *型別的指標、以及int * const或const int * const型別的指標賦給cptc(接受資料或指標修飾為const或非const),且必須在宣告時初始化,
對于型別為 int * 的常規指標,有以下特性:
- 型別為
int *的指標pt表示*pt和pt都不為常量,能用該指標修改所指物件的值,也能修改其所指向的地址(指標自身的值),和int * const型別的指標一樣,只能將int資料的地址 、int *型別的指標、以及int * const型別的指標賦給pt(只接受資料修飾為非const),
各型別一級指標的可修改屬性如下表所示:
| 指標型別 | 修改 *pt |
修改 pt |
|---|---|---|
const int * pt |
不可以 | 可以 |
int * const pt |
可以 | 不可以 |
const int * const pt |
不可以 | 不可以 |
int * pt |
可以 | 可以 |
若將資料的地址賦予一級指標,各型別一級指標可接受的資料地址如下表所示:
| 指標型別 | int地址 |
const int地址 |
|---|---|---|
const int * pt |
可以 | 可以 |
int * const pt |
宣告時可以 | 不可以 |
const int * const pt |
宣告時可以 | 宣告時可以 |
int * pt |
可以 | 不可以 |
若將一級指標的值賦予一級指標,各型別一級指標可接受的一級指標值如下表所示:
| 指標型別 | const int *值 |
int * const值 |
const int * const值 |
int *值 |
|---|---|---|---|---|
const int * pt |
可以 | 可以 | 可以 | 可以 |
int * const pt |
不可以 | 宣告時可以 | 不可以 | 宣告時可以 |
const int * const pt |
可以 | 可以 | 可以 | 可以 |
int * pt |
不可以 | 宣告時可以 | 不可以 | 宣告時可以 |
本文作者:木三百川
本文鏈接:https://www.cnblogs.com/young520/p/16690788.html
著作權宣告:本文系博主原創文章,著作權歸作者所有,商業轉載請聯系作者獲得授權,非商業轉載請附上出處鏈接,遵循 署名-非商業性使用-相同方式共享 4.0 國際版 (CC BY-NC-SA 4.0) 著作權協議,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/507111.html
標籤:C++
