| |
|
开发:
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、常量指针、指向常量的指针 |
有点迷迷糊糊的,不过好在,绕出来了 前提首先要知道,定义了一个 int 类型的数据之后,它的地址的类型为 int* 类型。 指向常量的指针什么叫指向常量的指针?
如果想使用一个指针来指向它,应该是什么类型的指针呢?首先说,下面的指针是不可以的
上面的例子中,定义了一个int* 类型的指针p,要用它来指向一个const int类型数据。是不能通过编译的。
上面两种写法都可以,都是const 要在 * 号之前。我比较习惯const 在 int 之前的写法。 注意,因为指针指向的是常量,是不可以修改常量的值的。即不可以通过指针修改内部的值,也不可以直接通过对 n 本身赋值来修改 n 的值。
因为 n 本身是const的,所以,其不可以更改,所以,无论是直接修改自身,还是通过指向它的指针修改,都是不可以的。 更进一步如下所示
首先定义了一个普通的整型变量 n (这次没有使用const修饰),又定义了一个 const int* 类型的指针 p ,指向了 n。注意这次是使用一个 const int* 类型的数据,指向了一个普通的整型变量。换句话说,将一个int* 的地址,给了const int* 类型的指针变量。通过编译了,是可以的。 为什么如此就可以,反过来就不行?答:从int*到const int *是从大范围到小范围,C++进行了隐式的转换,所以能够赋值成功。 前面的从const int * 到 int * 是从小范围到一个大范围,无法进行隐式类型转换,所以必须进行强制(显式)类型转换才能赋值成功就是这个原因了。
如果 n 是普通的 int 类型的数据,使用const int* 的指针 p 来指向它。那么仍然是无法通过指针来修改其中的数据,可能编译器认为 此时 p 指向的就是一个 const 的数据,所以不能通过指针修改。但是可以直接赋值修改 n ,毕竟 n 只是普通的数据。
总结:一个const int * 类型的指针,既可以指向普通的 int 类型的数据,又可以指向使用const 修饰的常量数据。此时的指针成为指向常量的指针。指针本身可以再指向别的数据。但是不可以通过指针去修改指向的数据。是否可以直接通过给数据赋值的形式,更改数据,就要看 该数据 究竟是不是真的const数据。 常量指针何谓常量指针,如下:
可以看到,const 放在了 * 的后面。
所以常量指针,即该指针只能指向一处。不能再指向别的位置。可以通过其修改指向的数据。 修改const类型的数据
n是const int 的数据,其地址类型为 const int*,而指针常量 p 是 int* const类型的,通不过编译。
注意看,竟然通过指针修改了所指向的地址里面的数据。
上例中 n 为const 类型的变量,p 为指向它的一个普通指针变量(如果定义为const int* 类型的指针,是不能通过指针修改指向的内存中的数据的)。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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:03:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |