C++ const和指针详情

 更新时间:2021年11月16日 10:45:36   作者:梁唐  
这篇文章主要介绍了C++ const和指针,关于使用const来修饰指针,有两种不同的方式。第一种是让指针指向一个常量对象,这样可以防止使用该指针进行修改指向的值。第二种则是将指针本身声明为常量,可以防止改变指针指向的位置,下面来看看文章的详细内容

1、指针和const

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

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

1.1 指向常量的指针

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

const int * p;


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

int age = 23;
const int* p = &age;

const double price = 233;
const double* pt = &price;


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

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


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

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

但是通过变量修改却是可以的:

int age = 23;
const int* p = &age;

*p = 233; // 非法
age = 233; // 合法


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

int age = 23;
int price = 233;
const int* p = &age;
p = &price;

1.2 const指针

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

int age = 23;
int* const p = &age;


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

*p = 2333; // 合法

1.3 指针和内容都不可变

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

const int * const p = &age;

到此这篇关于C++ const和指针详情的文章就介绍到这了,更多相关C++ const和指针内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

文章转自公众号:Coder梁(ID:Coder_LT)

相关文章

  • 详解C++编程中运算符的使用

    详解C++编程中运算符的使用

    这篇文章主要介绍了详解C++编程中运算符的使用,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • 基于大端法、小端法以及网络字节序的深入理解

    基于大端法、小端法以及网络字节序的深入理解

    本篇文章是对大端法、小端法以及网络字节序进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++简明讲解类型转换的使用与作用

    C++简明讲解类型转换的使用与作用

    类型转换(type cast),是高级语言的一个基本语法。它被实现为一个特殊的运算符,以小括号内加上类型名来表示,接下来让我们一起来详细了解
    2022-04-04
  • 基于C语言实现关机小游戏的示例代码

    基于C语言实现关机小游戏的示例代码

    关机会写吧!猜数字会写吧!本文将结合这两个功能,用C语言编写一个关机恶搞小游戏(最好的朋友转瞬即逝),只要猜对了,1分钟后执行关机,除非输入“我是猪”,但是输完后,1分钟后还是会执行关机,该保存保存,感兴趣的可以尝试一下
    2022-07-07
  • 在C语言中调用C++做的动态链接库

    在C语言中调用C++做的动态链接库

    如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明,那么你如何用c调用呢,别着急,本文通过一个小小的例子,让你能够很爽的搞定.
    2016-05-05
  • Cocos2d-x UI开发之场景切换代码实例

    Cocos2d-x UI开发之场景切换代码实例

    这篇文章主要介绍了Cocos2d-x UI开发之场景切换代码实例,cocos2d-x中的场景切换是通过导演类调用相应的方法完成的,本文通过代码和详细注释来说明,需要的朋友可以参考下
    2014-09-09
  • 从使用角度解读c++20 协程示例

    从使用角度解读c++20 协程示例

    类比线程,线程是个函数,把这个函数交给 创建线程的api,然后这个函数就变成线程了,这个函数本身没有任何特殊的地方,就是普通函数,这篇文章主要介绍了从使用角度解读c++20 协程示例,需要的朋友可以参考下
    2023-01-01
  • C++使用expected实现优雅的错误处理

    C++使用expected实现优雅的错误处理

    C++ 中提供了很多中方式进行错误处理。无论是通过抛异常还是通过错误码,标准库都提供相应的调用,今天本文为大家介绍的是使用expected进行错误处理,感兴趣的可以了解一下
    2023-06-06
  • C++中 静态局部变量实例详解

    C++中 静态局部变量实例详解

    这篇文章主要介绍了C++中 静态局部变量实例详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • C指针原理教程之C内嵌汇编

    C指针原理教程之C内嵌汇编

    在学习 C 语言内嵌汇编的实验过程中,发现内嵌汇编极容易造成段错误。
    2019-02-02

最新评论