可用三种不同的方式将 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
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/5636
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!