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的小小奇妙反应 -> 正文阅读

[C++知识库]【温故知新】指针与const的小小奇妙反应

前言

本文需要读者对指针有一定理解,关于指针部分,您可以参考:
Pointers in 5 minutes.


关于ANSI C标准

int main(int argc, char** argv)
{
    char *cp;
    const char *cpp;
    cpp = cp;
    cp = cpp;//产生编译警告
}

运行以上小小代码,会发现编译器会关于注释行报错

  • 初见此代码,我们会觉得cpp具有const修饰符,应该为read-only
    (我们都知道,const并不能将变量变为常量,只是表示当前符号不能被赋值)
    而cp可以自由修改

但是,结果却与我们预期的不同

那么为什么会这样呢,这一切还是要从ANSI C标准里找出答案

  • const char *类型并不是一个有限定符的类型,它的类型是“指向一个具有限定符的char类型的指针”,即const修饰的是指针所指向的类型,而不是指针本身(指针指向一个带有const限定符的char类型)

原来是这样,只有被指向的类型不可被赋值,而指针本身可以被改变

现在看来,我们已经可以大概理解cpp = cp的成立,那么注释行的报错又要怎么解释呢?

  • cp = cpp是指针的赋值运算
  • 要想使其赋值形式合法,必须满足下列条件之一:
    • 两个操作数都是指向有限定符或无限定符的相容类型的指针
    • 左边指针所指向的类型必须具有右边指针所指类型的全部限定符
  • 我们可以看出:
    • 左操作数是一个指向没有限定符的char的类型
    • 右操作数是一个指向指向有const限定符的char的指针
    • 左操作数并不具有右操作数所指向类型的全部限定符,所以赋值失败

到此,一切都通畅了起来
那么,cpp = cp可以成功的逻辑即是:

  • 左操作数所指向的类型具有右操作数所指向的类型的限定符(无:右边“无”限定符,将“无”限定符抽象为限定符:“无”)
  • 左操作数再加上自身的限定符(const)
  • 完美完成赋值

参考:

  • 《C专家编程》
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:22:53  更:2022-04-18 17:24:09 
 
开发: 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 23:43:39-

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