const 与 指针的恩怨情仇

    • 运行环境
  • 普通指针
  • 指针常量
  • 常量指针
  • 整段代码演示,不会直接倒立洗头

最近因为要学习C++,奈何C基础不太到家,当时连指针常量常量指针也分不清楚,
经过半个月的复习,在来到C++学习时,发现const在C++用的频率不小,特此记下。

ps: 如果是来复习的,那么前面三小节一个就能解除疑惑,纯小白强烈建议通读!!!

运行环境

vs2019
win10

普通指针

//此时p(指针地址)可变,*p(指针地址上的值)也可变
int *p;//比如,给指针变量p赋值
int a =10;
p = &a;//又比如,给指针*p赋值
int b = 100;
*p = b;

指针常量

指针常量: 顾名思义,名字太绕口,总是跟常量指针傻傻分不清。
所以可以这么去理解: 指针常量,即是指针是个常量,刚好,这个p(指针的地址)就是不可变的了。

// 下面代码简单示例一下
int a = 10;
//此时首次给指针p赋值后就不能在更改
int* const p = &a;

如果尝试修改p,编译器会给出报错信息
注意哪个表达式必须是可修改的左值,关于这个我就不多说了,懂了的一点就通了,没懂得也不必灰心,只是可能还没接触到。
图片的代码在完整版代码中

还有一个补充一下,用上了const,就必须一开始就赋初值,不然
就像下面那样,哈哈哈

常量指针

这个还好,如果把指针常量弄明白了,这个其实就更好理解了
常量指针,不就是这个常量让指针来保存吗!!!

//话不多说,上示例代码
int a = 10;
//这就是常量指针的亚子
const int * p = a;

喏喏喏,尝试修改常量指针的*p

整段代码演示,不会直接倒立洗头

代码可以直接运行
注释已标清

#include <stdio.h>
void test1()
{//普通指针//此时p(指针地址)可变,*p(指针地址上的值)也可变int* p;//比如,给指针变量p赋值int a = 10;p = &a;printf("普通指针开始p = %p\n", p);//再次指针变量p赋值int a1 = 20;p = &a1;printf("普通指针更改之后的p = %p\n", p);//又比如,给指针*p赋值int b = 100;*p = b;printf("普通指针开始*p = %d\n", *p);//再次给*p赋值int b1 = 200;*p = b1;printf("普通指针更改之后*p = %d\n\n", *p);return;//总结一下,普通指针p和*p都可以更改。
}void test2()
{//指针常量int a = 1000;//开始给p赋值int* const p = &a ;printf("指针常量开始时p = %p\n", p);//尝试更改p的值// 尝试失败了,所以我们将它注释掉// 有兴趣的读者可以在自己的编译器上尝试运行查看报错信息//int a1 = 2000;//p = &a1;//printf("更改之后p=%p", p);//开始时*p的值int b = 3000;*p = b;printf("指针常量开始时*p = %d\n", *p);//更改或*p的值int b1 = 4000;*p = b1;printf("指针常量更改后*p = %d\n\n", *p);return;//根据上面总结一下,//指针常量的p不可更改,*p可以更改
}void test3()
{//常量指针int a = 5000;//这里就不用区分p是否能更改了//因为定义指针变量p时没有赋初值,也没有报错const int* p;p = &a;//来看看*p 的状况//因为下面报错,所以注释掉//感兴趣可以拷贝自行尝试//int a1 = 6000;//*p = a1;//熟悉的配方,熟悉的味道//表达式必须是可修改的左值!!!return;//总结一下常量指针//p可以更改, *p不可更改
}
int main()
{//普通指针test1();//指针常量test2();//常量指针test3();return 0;
}

完整代码运行结果

其实本来只想几下关键的就行了,但想起自己刚学的时候,看到别人的解释,自己也是一知半解,到现在才搞明白const的微妙之处,所以为了纯小白能少走弯路,还是敲下了完整版的代码。一把辛酸一把泪啊,跑步去。

const 与 指针的恩怨情仇!!!相关推荐

  1. 关于const的恩怨情仇

    关于关键字const的用法是一个老生常谈的面试题了,并且项目开发中也会用到,const结合指针更是一个有趣的话题 #include<stdio.h>int main(void){const ...

  2. const 修饰指针

    目录 const修饰指针 1.1const 放在*的左边 1.2const放在*的右边 const修饰指针 1.1const 放在*的左边 修饰的是指针指向的内容(*p),指针指向的内容,不能通过指针 ...

  3. 漫画:前端发展史的江湖恩怨情仇

    作者 | 前端布道师 来源 | 前端布道师(ID:honeyBadger8) 时间总是过得很快, 似乎快得让人忘记了昨天,前端WEB领域的发展更是如此,转眼间已是近30年,时光荏苒,初心不变,在一代又 ...

  4. 宏观与量子的恩怨情仇

    第四章:宏观与量子的恩怨情仇 我们知道哥本哈根诠释由波尔和海森堡于1927年在哥本哈根合作研究时共同提出的.此诠释建立在由德国数学家.物理学家Max Born所提出的"波函数的概率表达&qu ...

  5. [你必须知道的.NET]第一回:恩怨情仇:is和as

    本文将介绍以下内 容: • 类型转换 • is/as操作符小议 1. 引言 类型安全是.NET设计之初重点考虑 的内容之一,对于程序设计者来说,完全把握系统数据的类型安全,经常是力不从心的问题.现在, ...

  6. C语言--const修饰指针解析

          这种例子在我们平时编程时可能会很少用,但是在面试时被问的可能性就很大了. 用const修饰指针,常见的情况可以分为四种: 1.const int *p; // p 可变,p 指向的对象不可 ...

  7. C++阶段01笔记07【指针(基本概念、变量定义和使用、内存空间、空指针和野指针、const修饰指针、指针和数组、指针和函数)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 7 指针 7.1 指针的基本概念 7.2 指针变量的定义和使用 示例 7.3 指针所占内存空间 示例 7.4 空指针和野指针 示 ...

  8. boost::core模块实现分配const void指针

    boost::core模块实现分配const void指针 实现功能 C++实现代码 实现功能 boost::core模块实现分配const void指针 C++实现代码 #include <b ...

  9. C++中const与指针

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105113742 C ...

最新文章

  1. 计算机视觉(AI)的算法有哪些,具体都有哪些特点?
  2. jsonView谷歌插件
  3. 设计ADuC845低噪声信号采集版
  4. Vue axios 上传图片
  5. USACO Section 4.2 题解
  6. 1049. 数列的片段和(20)
  7. python可以做计量分析吗_技术分享 - python数据分析(2)——数据特征分析(上)...
  8. C# 8.0 的新特性概览和讲解
  9. 好程序员教程分析Vue学习笔记五
  10. 使用ML.Net和C#进行机器学习
  11. 输出奇数和偶数(Java)
  12. redis新数据类型-Geospatial
  13. 拓端tecdat|GIS遥感数据可视化评估:印度河流域上部的积雪面积变化
  14. asp在线html编辑器,ASP下使用FCKeditor在线编辑器的方法
  15. 博信医药系统连接不到服务器,博信医药管理系统
  16. Fujitsu DPK8310Tax 打印机驱动
  17. 字节跳动李航博士入选2019 ACL Fellow,成为第五位入选华人学者
  18. 计算机系统常见故障及处理,电脑常见故障以及解决方案都在这里!
  19. java中gc是什么_java什么是gc
  20. Livezilla安装配置, APE(Ajax Push Engine)安装配置

热门文章

  1. PCB电路设计规范细节
  2. AngularJS 整理学习
  3. 官方mysql的最新版下载网址
  4. win10台式机rtl8188eu(FW 150 UM V2.0)无线网卡无法连接wifi(无法连接到这个网络)
  5. 【算法】【题解】【usaco】 最受欢迎的牛
  6. 实战项目-百思不得姐-精华
  7. mysql和sql server连接不上_php-通过不可靠的网络连接在MySQL和SQL Server...
  8. 基于政治优化算法的函数寻优算法
  9. Assignment写作中的论证充分性讲解
  10. 老左博客-前端资源-表格样式