const 与 指针的恩怨情仇!!!
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 与 指针的恩怨情仇!!!相关推荐
- 关于const的恩怨情仇
关于关键字const的用法是一个老生常谈的面试题了,并且项目开发中也会用到,const结合指针更是一个有趣的话题 #include<stdio.h>int main(void){const ...
- const 修饰指针
目录 const修饰指针 1.1const 放在*的左边 1.2const放在*的右边 const修饰指针 1.1const 放在*的左边 修饰的是指针指向的内容(*p),指针指向的内容,不能通过指针 ...
- 漫画:前端发展史的江湖恩怨情仇
作者 | 前端布道师 来源 | 前端布道师(ID:honeyBadger8) 时间总是过得很快, 似乎快得让人忘记了昨天,前端WEB领域的发展更是如此,转眼间已是近30年,时光荏苒,初心不变,在一代又 ...
- 宏观与量子的恩怨情仇
第四章:宏观与量子的恩怨情仇 我们知道哥本哈根诠释由波尔和海森堡于1927年在哥本哈根合作研究时共同提出的.此诠释建立在由德国数学家.物理学家Max Born所提出的"波函数的概率表达&qu ...
- [你必须知道的.NET]第一回:恩怨情仇:is和as
本文将介绍以下内 容: • 类型转换 • is/as操作符小议 1. 引言 类型安全是.NET设计之初重点考虑 的内容之一,对于程序设计者来说,完全把握系统数据的类型安全,经常是力不从心的问题.现在, ...
- C语言--const修饰指针解析
这种例子在我们平时编程时可能会很少用,但是在面试时被问的可能性就很大了. 用const修饰指针,常见的情况可以分为四种: 1.const int *p; // p 可变,p 指向的对象不可 ...
- C++阶段01笔记07【指针(基本概念、变量定义和使用、内存空间、空指针和野指针、const修饰指针、指针和数组、指针和函数)】
C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 7 指针 7.1 指针的基本概念 7.2 指针变量的定义和使用 示例 7.3 指针所占内存空间 示例 7.4 空指针和野指针 示 ...
- boost::core模块实现分配const void指针
boost::core模块实现分配const void指针 实现功能 C++实现代码 实现功能 boost::core模块实现分配const void指针 C++实现代码 #include <b ...
- C++中const与指针
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105113742 C ...
最新文章
- 计算机视觉(AI)的算法有哪些,具体都有哪些特点?
- jsonView谷歌插件
- 设计ADuC845低噪声信号采集版
- Vue axios 上传图片
- USACO Section 4.2 题解
- 1049. 数列的片段和(20)
- python可以做计量分析吗_技术分享 - python数据分析(2)——数据特征分析(上)...
- C# 8.0 的新特性概览和讲解
- 好程序员教程分析Vue学习笔记五
- 使用ML.Net和C#进行机器学习
- 输出奇数和偶数(Java)
- redis新数据类型-Geospatial
- 拓端tecdat|GIS遥感数据可视化评估:印度河流域上部的积雪面积变化
- asp在线html编辑器,ASP下使用FCKeditor在线编辑器的方法
- 博信医药系统连接不到服务器,博信医药管理系统
- Fujitsu DPK8310Tax 打印机驱动
- 字节跳动李航博士入选2019 ACL Fellow,成为第五位入选华人学者
- 计算机系统常见故障及处理,电脑常见故障以及解决方案都在这里!
- java中gc是什么_java什么是gc
- Livezilla安装配置, APE(Ajax Push Engine)安装配置