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