可用七種不同的方式將 const 關鍵字用於二級指針,如下所示: //方式一:所指一級指針指向的數據為常量,以下幾種為等效表示 const int ** pptc; //方式一 int const ** pptc; //方式二 //方式二:所指一級指針為常量 int *const* pcpt; // ...
可用七種不同的方式將 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) 版權協議。