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与指针 -> 正文阅读

[C++知识库]C++:const与指针

目录

const在C和C++中的区别

C方式

C++方式

?const与指针

const

指针之间的相互赋值

const在C和C++中的区别

C方式

C方式编译时

以变量为主。所以编译器会报错,原因为:为一个变量,在定义数组时n要求为一个常量,要么是#define定义的宏常量要么是enum枚举常量或者是一个具体的数值。

*p的改变改变的时n本身。

在汇编层面:到n的地址空间,把n的值给eax,再把eax的值给b,

C++方式

C++编译时:以常量为主。

在汇编层面,?

在C++中你看到的代码不是真正的代码,n是一个常变量,在编译时遇见n用5进行替换,但调试是在源码中调试,执行是在汇编机器上执行,看见的和具体执行的不是一回事。虽然在内存中通过*p把n的值变成100,但在编译的时候n不复存在,把它替换成5,把5给b,所以最后打印的结果为n=5 b=5 *p=100。

?const与指针

?

指针有两个值,一个是他自身的值,一个是他解引用后的值。p1通过解引用可以改变a的值,但是p1自身还可以指向b,p1里存放的时a的地址,解引用就是a本身

const

const int* p2 =&a;与int const* p2 = &a;这两种写法是等价的。

const在星号(*)左边,修饰的是它的指向能力,p2指向了a的地址,但由于const的修饰,通过*p2去改变a的值是不允许的。但p2本身没有被const修饰,p2本身是可以被改变的。

const在星号(*)的右边,const和变量名离得较近,修饰的是变量名指针变量用const修饰变成了一个常性指针,所以p3自身是常性,可以对p3进行解引用,但是不能对p3进行写

?

?两个const分别修饰p4得指向能力和指针变量。说明p4自身不能变,指向能力也不能变,无法对p4进行解引用,p4自身的值也不能变,不可写但可读。封锁的是写的能力。

变量和指针之间的关系

?const int b=20;//b是一个常变量

const int* p2=&b;//p2可以指向b,但是不能修改b

指针之间的相互赋值

s指向a不能对a进行解引用,把s的值给p1时,*p1可以改变a的值,能力被扩展不安全error;p3的const修饰的是指针自身不能改变,可以通过*p3去解引用,能力被扩展不安全error。

?

?s自身不能改变,但可以改变指向。s给p1时,*p1可以改变指向的值,p1指向&b时,不会使s也指向&b,所以编译通过;p2和p1一样,多了一个指向约束,可以指向但不能改变,可以编译通过。

用常性修饰相同类型的指针时,发生的数值兼容性规则,主要的问题就是安全性。

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

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