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++知识库 -> const int * int const * int * const顶层const和底层const -> 正文阅读

[C++知识库]const int * int const * int * const顶层const和底层const

区分const int * , int const *, int * const

  1. const int * p = 1 表示变量p所指的对象是不变的,p是可以改变的,即*p = 1不可以改变,但p的地址可以改变;
  2. int const * p = 1同上;
  3. int * const p = 1表示变量p不可以改变,即地址不变,但所指的对象可以改变。

底层和顶层const概念区分

顶层const :指const所修饰的变量本身是一个常量,自身无法更改;例如上述int * const p = 1,其中p的值无法更改,所以是一个顶层const

底层const :指const所修饰的变量所指的对象是一个常量,变量自身可以改变;例如上述const int * p = 1或者int const * p = 1,p的值是可以改变的,但是*p不可以改变。

作用区分

按照常识,一个非常量可以赋值给另一个非常量和一个常量;但是一个常量只能赋值给另一个常量,因此在此处也是如此。

当执行拷贝操作时,顶层const不受影响,但是底层const的只能拷贝到底层const

在下方我们会看到一个矛盾却又不矛盾的例外

		 `const int j = 2` 或者是`int const j = 2` 

在《C++ Primer》 第五版中,他告诉我们这是一个顶层const,似乎不难理解,毕竟j的本身是一个常量。但是当我使用下面语句赋值时,

					`int* const p2 = &j`

编译器报错了,他告诉我"const int *" 类型的值不能用于初始化 "int *const" 类型的实体

不过虽然违背了我们之前所讨论的,但是如果单单将const int j = 2 看做一个常量,似乎又不难理解了,毕竟,常量无法初始化一个非常量。

上述是我的粗浅理解,如果各位大佬有不同的理解,请告诉我,感谢!

void test()
{
    int i = 1;
    int const j = 2;    //j 的值不可以更改,这是一个顶层const
    int* const p1 = &i;  //const修饰的是p本身,不能改变p1的值,其是一个顶层const
    int const * p3 = &j;    //const 修饰的是p3所指的对象  
    p3 = &i;    //p3的值可以改变
    int * const p4 = p1;    //顶层const 赋值给 顶层const
    int const * p5 = p1;    //顶层const 赋值给 底层const
    int const * p6 = p3;    //底层const 赋值给 底层const
    //int * const p7 = p3;  //不能将一个底层const 赋值给 顶层const

    //例外在于 j = 2 
    //int* const p2 = &j;   //此处会报错
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:10:02  更:2022-03-08 22:11:02 
 
开发: 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/24 5:08:25-

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