首页 > 编程语言 >【《C++ Primer 第四版》读书笔记】4.2.5-指针和const限定符

【《C++ Primer 第四版》读书笔记】4.2.5-指针和const限定符

时间:2023-07-09 22:12:20浏览次数:41  
标签:pi const 指向 读书笔记 double 限定符 ptr 指针

1.指向const对象的指针

1.1 表现形式
const double *ptr,const void *ptr
1.2 如何理解

无法通过ptr这个指针变量去修改所指向内存区域的值,但是ptr这种指针变量可以重复赋值,指向不同的内存地址
注意ptr这个指针变量赋值时,既可以赋值为const类型变量(书中所说的const对象)的地址,也可以赋值为非const类型变量(书中所说的非const对象)的地址

通过以下代码示例进一步理解:

const double pi = 3.14;
double x = 9.99;

const double *ptr1 = π //成立
const double *ptr2 = &x;  //成立,只是不能通过ptr2这个指针去修改x的值
double *ptr3 = &x;  //但是如果有普通double类型指针也指向x变量,可以通过这个指针修改x的值!!
*ptr3 = 1.11;
1.3 如何应用

指向const对象的指针常用作函数的形参,以确保传递给函数的实际对象在函数执行中不被修改

2.const类型的指针

2.1 表现形式
int errCode = 500;
int *const curCode = &errCode;
2.2 如何理解

这种类型的指针变量就是说本身的值不能再被修改,不能再指向别的内存区域了,必须在定义的时候完成内存区域的指向动作

注意:const类型的指针必须在定义时初始化,而指向const对象的指针在定义时不需要对它进行初始化,重点还是要区分清楚指针变量本身是否可以被修改,以及指针变量所指向的内存区域是否可以被修改

3.指向const对象的const指针

3.1 表现形式
const double pi = 3.14;
const double *const pi_ptr = π
3.2 如何理解

相当于把前两种const组合起来使用,在以上的示例中,既不能修改pi_ptr所指向对象的值,也不允许修改pi_ptr这个指针的值

标签:pi,const,指向,读书笔记,double,限定符,ptr,指针
From: https://www.cnblogs.com/hzbkd/p/17531859.html

相关文章

  • Atcode Beginner Constest 309 E
    e题的题意又理解错了(E.FamilyandInsurance题意给定一棵或者若干棵树,以及\(m\)次操作。每次操作将一个节点后面几层的儿子节点的权值加1,求最后有多少节点的权值至少为1。思路设\(dp[i]\)为节点\(i\)后面有几个节点被覆盖,若没有覆盖为-1。DFS一遍维护每个\(dp[i]\)的最大值,......
  • [AGC036F] Square Constraints
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa每个数能取的范围是一段区间\([l_i,r_i]\),其中\(l_i\)单调不增,\(r_i\)单调不增。画个图(\(n=10\)):圆环和矩形的交即为合法点。容易看出\(l_n\)到\(l_{2n-1}\)都是0。本质上是元素有上下界的排列计数,考虑不管下界......
  • P7561[JOISC 2021 Day2] 道路の建設案 (Road Construction) 题解
    P7561[JOISC2021Day2]道路の建設案(RoadConstruction)题解题目描述JOI国是一个\(x\timesy\)的二维平面,王国里有\(n\)个城镇,分别编号为\(1,2,\cdots,n\in[1,2.5\times10^5]\),其中第\(i\)个城镇的坐标为\((x_i,y_i)\)。在JOI国,正计划修建连接两座城......
  • spring注解之@PostConstruct在项目启动时执行指定方法
    学习资料:https://juejin.cn/post/7247543825534419000https://qa.1r1g.com/sf/ask/238458881/......
  • 《Effective C++ 改善程序与设计的55个具体做法》读书笔记
    1.让自己习惯C++条款01视C++为一个语言联邦CObject-OrientedC++TemplateC++STLC++高效编程守则视情况而变化,取决于你使用C++的哪一部分。条款02尽量与const,enum,inline替换#define对于单纯常量,最好以const对象或enums替换#defines。对于形似函数的宏(macros),最好改......
  • ES6 的 新特性 1 let,const
    Let,Const,Var可以放一起说这三个都是JS中用来声明变量的关键字。主要的区别是1.作用域Var声明的变量的作用域是当前的执行上下文,也就是说,如果在函数外部声明,则是全局变量,如果是函数内部声明,则是整个函数块的变量。Let声明的变量的作用域则是当前的代码块,也就是说可以像var一......
  • 报错 Cannot construct instance of `java.time.LocalDate` LocalDateTime
    原因:报错的原因就是导入了JacksonObjectMapper对象映射器,导致不知道怎么将LocalDateTime转换成Json类型的数据了,在没有导入使用JacksonObjectMapper的时候是不会报错的。解决方式:指定LocalDateTime类型的数据如何进行序列化就好了,给实体类中LocalDateTime的属性加上注解就可以了:......
  • 102.volatile限定符
    ☀警告volatile的确切含义与机器有关,只能通过阅读编译器文档来理解。要想让使用了volatile的程序在移植到新机器或新编译器后仍然有效,通常需要对该程序进行某些改变。直接处理硬件的程序常常包含这样的数据元素,它们的值由程序直接控制之外的过程控制。例如,程序可能包含一个由系......
  • 24.C++中const和static的作用
    static●不考虑类的情况○隐藏。所有不加static的全局变量和函数具有全局可见性,可以在其他文件中使用,加了之后只能在该文件所在的编译模块中使用○默认初始化为0,包括未初始化的全局静态变量与局部静态变量,都存在全局未初始化区○静态变量在函数内定义,始终存在,且只进行一次初始......
  • 23.define宏定义和const的区别
    编译阶段define是在编译的预处理阶段起作用,而const是在编译、运行的时候起作用安全性define只做替换,不做类型检查和计算,也不求解,容易产生错误,一般最好加上一个大括号包含住全部的内容,要不然很容易出错const常量有数据类型,编译器可以对其进行类型安全检查内存占用define......