EasyC++,Const和指针

开发 后端
关于使用const来修饰指针,有两种不同的方式。第一种是让指针指向一个常量对象,这样可以防止使用该指针进行修改指向的值。第二种则是将指针本身声明为常量,可以防止改变指针指向的位置。下面我们来看下细节。

 

[[434119]]

大家好,我是梁唐。

这是EasyC++系列的第28篇,简单聊聊const和指针。

指针和const

我们知道const关键字修饰的是不可变量,将它和指针一起使用,会有很多微妙的地方。

关于使用const来修饰指针,有两种不同的方式。第一种是让指针指向一个常量对象,这样可以防止使用该指针进行修改指向的值。第二种则是将指针本身声明为常量,可以防止改变指针指向的位置。下面我们来看下细节。

指向常量的指针

首先是指向常量的指针,含义是指针的类型是一个常量类型。所以写成:

  1. const int * p; 

可以理解成p是一个指针,它的类型是const int,也就是常量类型。它既可以用来指向一个常量类型,也可以指向一个非常量类型,下方的这两种方式都是合法的:

  1. int age = 23; 
  2. const int* p = &age; 
  3.  
  4. const double price = 233; 
  5. const double* pt = &price; 

但是反过来,将一个const类型的变量赋值给一个非const的指针是非法的:

  1. const int age = 23; 
  2. int* p = &age; // 非法 

如果非要这样做,可以使用const_cast运算符进行强制转换,这个我们会在之后的文章当中讨论。

另外还有一个很有意思的点,如果我们将一个非const类型的变量赋给了const类型的指针,虽然我们无法通过指针修改对应的值,但是通过变量修改却是可以的:

  1. int age = 23; 
  2. const int* p = &age; 
  3.  
  4. *p = 233; // 非法 
  5. age = 233; // 合法 

还有,我们无法修改指针指向的值,但是修改指针指向的位置是可以的:

  1. int age = 23; 
  2. int price = 233; 
  3. const int* p = &age; 
  4. p = &price; 

const指针

上面我们介绍了指向const的指针,还有另外一种指针叫做const指针。const指针指的是指针本身是const修饰的,我们无法修改指针指向的位置。

  1. int age = 23; 
  2. int* const p = &age; 

但是我们修改指针指向的值是可以的:

  1. *p = 2333; // 合法 

指针和内容都不可变。

当然我们也可以将两种const叠加使用,让指针指向的对象以及对象的值都不可修改:

  1. const int * const p = &age; 

本文转载自微信公众号「Coder梁」,可以通过以下二维码关注。转载本文请联系Coder梁公众号。

 

责任编辑:武晓燕 来源: Coder梁
相关推荐

2021-12-12 18:13:54

C++This指针

2021-11-10 10:48:36

C++函数指针

2021-10-27 16:27:20

C++指针操控

2021-10-29 09:44:50

C++指针变量

2021-12-29 20:31:40

C++多态指针

2021-12-09 10:56:50

函数C++原型

2021-11-26 00:03:20

C++编译常量

2021-11-30 11:04:36

C++函数语言

2021-12-08 10:43:09

C++实现

2021-12-30 14:58:58

C++函数动态

2021-12-10 10:45:36

C++函数Stock

2021-10-26 00:19:51

C++结构体存储

2021-11-27 11:50:09

C++静态持续

2021-12-11 19:02:03

函数C++对象

2021-12-03 10:48:18

Using编译指令

2022-01-07 15:10:53

C++动态内存

2021-12-01 10:50:31

C++存储动态

2021-12-15 10:25:57

C++运算符重载

2022-01-04 16:35:42

C++Protected关键字

2021-12-05 18:20:42

C++空间特性
点赞
收藏

51CTO技术栈公众号