IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 常量指针和指针常量:理解C++中的底层const和顶层const -> 正文阅读

[C++知识库]常量指针和指针常量:理解C++中的底层const和顶层const

常量指针

常量指针的意思是指向常量的指针,其声明const要放在*的前面,而const和具体类型的顺序则无所谓,即

int a = 5;
const int * p = &a;

int a = 5;
int const * p = &a;

是没有区别的,均表示定义一个常量指针p。常量指针通常也被称作底层const(指向的底层变量为const),但需要注意,常量指针指向的变量不一定是const,声明其为常量指针只是说不能通过改指针修改指向变量的值,但如果变量本身非常量则仍然是可以修改的。例如:

*p =4;

会报错,但

a = 5;

是没有问题,且可以生效的。并且,常量指针本身是可以指向其他变量的,例如:

int a = 12;
int b = 13;
const int *p1 = &a;
p1 = &b;
cout << *p1 << endl; //输出 13

而赋值,常量指针只能接受常量指针的赋值,例:

int a = 3;
const int *p1 = &a;
//int *p2 = p1;  //错误,不能将底层const指针赋值给非底层const指针,(p1指向常亮,p1不能改变指向的值,如果p2 = p1,则可以执行*p2 = A,从而将p1指向的2值改变,故是非法)
const int *p3 = p1; //正确,可以将底层const指针复制给底层const指针

指针常量

指针常量的意思是指针本身是常量,在声明时必须初始化(对于类的话在构造函数里初始化),指针值无法修改,其声明const必须放在*之后,例如:

int a = 6;
int * const p = &a;

指针常量通常也被称为顶层const。指针常量本身值不能改变,但其指向的变量值是可以改变的,例:

int a = 6;
int * const p = &a;
cout << *p << endl; // 输出6
a = 12; 
cout << *p << endl; // 输出12

const_cast

const_cast一般用于底层const,也就是将常量指针变为非常量指针,当然要保证不出错的话,其指向的变量实际不能是常量。对于指针常量,由于常量本身作为右值赋值给非常量就是可以的,就像const_cast<const int *>这种操作,本身加不加const_cast区别是不大的,所以基本不会使用,例如:

int a = 12;
int b = 23;
int const *p = &a;
int *p1 = const_cast<int *> (p);
*p1 = 23;
cout << a << endl; //没有问题, a=23
//****************************
int *const p2 = &a;
int *p3 = const_cast<int *> (p2); //没有问题,常量本来就可以赋值给变量
cout << *p3 << endl;
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 10:59:30  更:2022-05-05 11:01:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:41:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码