EasyC++28,const和指针
C++ 指针 28 Easy const
2023-06-13 09:11:30 时间
作者 | 梁唐
大家好,我是梁唐。
这是EasyC++系列的第28篇,简单聊聊const和指针。
指针和const
我们知道const
关键字修饰的是不可变量,将它和指针一起使用,会有很多微妙的地方。
关于使用const
来修饰指针,有两种不同的方式。第一种是让指针指向一个常量对象,这样可以防止使用该指针进行修改指向的值。第二种则是将指针本身声明为常量,可以防止改变指针指向的位置。下面我们来看下细节。
指向常量的指针
首先是指向常量的指针,含义是指针的类型是一个常量类型。所以写成:
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;
const指针
上面我们介绍了指向const
的指针,还有另外一种指针叫做const
指针。const
指针指的是指针本身是const
修饰的,我们无法修改指针指向的位置。
int age = 23;
int* const p = &age;
但是我们修改指针指向的值是可以的:
*p = 2333; // 合法
指针和内容都不可变
当然我们也可以将两种const
叠加使用,让指针指向的对象以及对象的值都不可修改:
const int * const p = &age;
相关文章
- 手把手带你学C++,set是个啥,有什么用?
- EasyC++10,字符串初体验
- EasyC++17,C++指针初探(三)
- EasyC++61,this指针
- C++ this指针
- C++数组初始化[通俗易懂]
- C++ – 实现strstr函数
- 【c++】【基础】【primer_plus】【第四章】指针与内存
- 【c++】【基础】【primer_plus】【第十章】面向对象与类
- c++线程间通信_c语言两个线程如何通信
- C++结构体和类的区别_c++有结构体吗
- libcopp对C++20协程的接入和接口设计
- C++基础——C++面向对象之类、对象与继承基础总结(类和对象概念、构造函数与析构函数、this指针、继承)
- C/C++ 定位文件 .text 区段地址
- c++基础
- c++基础篇之C++ 模板
- 开心档之C++ 指针
- C++11 weak_ptr智能指针(一看即懂)
- string流,C++ string流及其用法详解
- 指针变量是什么,C++指针变量详解
- 探讨C++中数组名与指针的用法比较分析
- 深入解析C++中的mutable关键字
- C++中的对象指针总结
- C++基础入门教程(四):枚举和指针