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++之指针常量、常量指针和指向常量的常量指针的区别 -> 正文阅读

[C++知识库]C++之指针常量、常量指针和指向常量的常量指针的区别

指针常量

其实,我们常见的数组就是一个指针常量,指针常量表示指向的内存地址一旦初始化后就不可更改,但是其地址指向的值可以更改。

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <ctime>

using namespace std;

int main() {
    system("chcp 65001");
    int b[3] = {1, 2, 3};
    int *const a = b;
    cout << "b[0]指向的内存地址:" << &b[0] << endl;
    cout << "a指向的内存地址:" << a << endl;
    cout << "赋值前的a指向的值:" << *a << endl;
    //错误写法:a = &b[1];
    //正确写法,改变其内存地址指向的值
    *a = b[1];
    cout << "赋值后的a指向的值:" << *a << endl;
    return 0;
}
输出:
Active code page: 65001
b[0]指向的内存地址:0x63fe0c
a指向的内存地址:0x63fe0c
赋值前的a指向的值:1
赋值后的a指向的值:2

常量指针

常量指针指向的地址可以改变,但是其值不可以改变,值的改变只能通过修改指向的地址后改变。

#include <iostream>
#include <cstdlib>

using namespace std;

int main() {

    system("chcp 65001");
    int b = 1;
    int c = 2;
    const int *a = &b;
    cout << "a初始化指向的内存地址:" << a << endl;
    cout << "a初始化的值:" << *a << endl;
    //错误写法*a = 2;
    //正确写法
    a = &c;
    cout << "a重新指向的内存地址:" << a << endl;
    cout << "a重新指向内存地址后的值:" << *a << endl;
    return 0;
}
输出:
Active code page: 65001
a初始化指向的内存地址:0x63fe14
a初始化的值:1
a重新指向的内存地址:0x63fe10
a重新指向内存地址后的值:2

指向常量的常量指针

指向常量的常量指针形式为const char *const p = &x;
此初始化之后,其值其地址均不可改变

区分指针常量和常量指针的口诀:

指针和 const(常量) 谁在前先读谁 ;*象征着地址,const象征着内容;谁在前面谁就不允许改变。

使用const的好处

在C/C++中关键字const用来定义一个只读的变量或者对象,有如下优点:

(1)便于类型检查,如函数的函数 fun(const int a) a的值不允许变,这样便于保护实参。
(2)功能类似与宏定义,方便参数的修改和调整。如 const int max = 100;
(3)节省空间,如果再定义a = max,b=max。。。就不用在为max分配空间了,而用宏定义的话就一直进行宏替换并为变量分配空间
(4)为函数重载提供参考

参考:C语言——常量指针、指针常量以及指向常量的指针常量三者区别详解

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

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