阅读c++ primer plus指针部分内容

最近一直在阅读c++ primer plus中文第六版,不愧是c++经典教程,让我这个小白从几乎0基础入手c++。翻译的可以,当然原版作者更是大神。
指针部分,介绍指针的略过。主要纪录细节问题

1.指针与数字

不能简单地将整数赋值给指针。因为指针和整数是截然不同的类型,虽然计算机通常将地址当做整数处理,但是指针用于描述位置,不等于整数。
c99发布之前的c语言运行给指针直接赋值整数

例如:

int* pr;
pr = 0xB8000000;

但是c++要求很严格,编译器对此会报错。如果要使用,必须强制类型转换

int* pr;
pr = (int*)0xB000000;//可行的

同时,注意虽然会有各种类型的指针,如:

int* pr1;
char* pr2;
long* pr3;
double* pr4;

但是我们始终要牢记,指针是对应类型的地址不意味着指针本身是对应类型
例如:int* pr 中pr不是int型,他是指向int类型数据的指针,*pr才是int型
同时,我们应当了解,int* pr1;char* pr2;long* pr3;double* pr4;
这里的pr1,pr2,pr3,pr4虽然是指向不同类型的指针,但是他们都是相同字节大小。例如64位系统中指针大小为8字节值。千万不要混淆,误以为pr1所占字节的大小和int类型所占字节大小相同,pr2所占字节和char类型所占字节大小相同

2.new分配内存

在c语言中我们使用malloc分配内存,c++中可以继续使用,但是更推荐new运算符
例如:int* pr = new int; new int告诉程序,需要分配一个适合int的内存,例如64位系统中int占4个字节
那么就需要连续的四个字节的内存来分配给int。然后将该地址赋值给pr(可以理解为将连续四个字节地址的第一个字节地址编号赋值给pr)
我们可以对比如下两种方式

//方式一:
int higgens;
int* pr = &higgens;//方式二:
int* pr = new int;

在第一种方式,可以通过*pr(即解引用指针)来访问数据,也可以通过higgens访问数据。但是第二种只能通过*pr来访问数据。
同时,new分配的内存块通常与常规变量分配的内存块不同。常规变量的值都存在栈中,而new从堆中或者自由存储区的内存区域分配内存。这部分内容,看Java或者c++或者c的程序内存分配就行。结合程序和内存图,可以更快看懂。

3.delete释放内存

要使用内存时,可以使用new来请求,另一方面,可以使用delete来释放内存,这样可以更有效使用宝贵的内存。
使用方法如下:

int* ps = new int;//通过new方式分配内存
...			//使用内存
delete ps;//释放内存

注意:1.这里释放ps指向的内存,但不会删除ps本身,因为ps本身所在空间是栈中(属于常规变量)
此后,我们可以将ps指向另一个新分配的内存块。
2.尽量配对使用new和delete
3.不要尝试释放已经释放的内存块,c++标准说这样做的结果是不确定的,意味着什么情况都可能发生。同时也不能用delete来释放声明变量所获得的内存
例如:

int* ps = new int;//分配内存
delete ps;//可以的,new与delete配对使用
delete ps;//不可以,不能delete一个已经delete后的内存块
int ju = 5;//给变量ju初始化为5
int* j = &ju;//给int*指针赋值ju的地址
delete j;//不允许的,这里的指针j所指向的地址不是通过new获取的,而是声明变量的地址,也就是说这个地址很可能在栈中

4.通过new创建动态数组

所谓动态数组,往往应用于程序的运行阶段,如果需要就创建,不需要就不创建,而且大小也由程序决定。区别于在编写程序和编译阶段就固定大小的静态数组
应用:

int* psome = new int[10];//创建一个包括10个int元素的数组

psome被赋值了这10个元素中第一个元素的地址
如果想delete释放,则用如下格式:delete [] psom; []告诉程序,应该释放整个数组,而不是指针指向的元素,前面我们说过,指针psome指向的是10个元素的第一个元素的地址,而现在我们要释放10个元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/18463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读人工智能时代与人类未来笔记17_人类未来

1. 人类未来 1.1. 在印刷读物出现之前,中世纪的欧洲人主要通过社区传统获取知识 1.1.1. 通过参与收割和季节轮作积累民间智慧 1.1.2. 在礼拜场所践行信仰并遵守圣礼 1.1.3. 加入行业公会,学习技术&…

fix leakage脚本

芯片的PPA追求是无止境的,因而在修时序的过程中我们需要对设计修复leakage,降低芯片的静态功耗。 以下分享一个典型的leakage脚本 set design 1 set version "V1" set date [exec date %m%d%H%M] set working_directory ${design}_${version}…

补环境——A股市场

补环境 吐环境 1.Proxy对象 Proxy对象由两个部分组成:target、handler target:目标对象 handler:是一个对象,声明了代理target的指定行为,支持的拦截操作,一共13种: get(target,propKey,receiver)&…

Leetcode:找出峰值

普通版本 题目链接&#xff1a;2951. 找出峰值 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> findPeaks(vector<int>& mountain) {int sz mountain.size();vector<int> newMountain;for(int i 1;i < sz-1;i){…

return _VF.meshgrid(tensors, **kwargs) 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法三、调用示例参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04, anaconda 一、问题描述 /home/wong/ProgramFiles/anaconda3/envs/pytorch_env/lib/python3.8/site-packages/torch/functional.py:504: UserWarning: tor…

Java特性之设计模式【备忘录模式】

一、备忘录模式 概述 备忘录模式&#xff08;Memento Pattern&#xff09;保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对象&#xff0c;备忘录模式属于行为型模式 备忘录模式允许在不破坏封装性的前提下&#xff0c;捕获和恢复对象的内部状态 主要解决&#xff…

【硬核测评】猫咪主食冻干测评揭秘SC、希喂、爱立方真实对比测评

主食冻干喂养是否必要&#xff1f; 来自七年经验的铲屎官明确告诉你&#xff0c;这是非常必要的喂养方式&#xff01; 随着宠物经济的蓬勃发展和科学养宠知识的普及&#xff0c;如今养猫已不仅仅是让猫咪吃饱那么简单。越来越多的养猫人开始重视猫咪的饮食健康。大量实际喂养案…

电脑如何远程访问?

【天联】的使用场景 电脑远程访问在现代科技的发展中扮演了重要的角色。对于企业和个人用户来说&#xff0c;远程访问的便利性提供了许多机会和可能性。作为一种高效的工具&#xff0c;【天联】具有广泛的应用场景&#xff0c;可以实现异地统一管理、协同办公以及远程数据采集…

C++单元测试覆盖率统计工具:GCOV+LCOV

1. gcov基础 1.1 gcov概述 gcov是GNU编译器集合&#xff08;GCC&#xff09;的一个测试覆盖分析工具&#xff0c;它能够测量程序的执行覆盖率。gcov可以分析源代码中哪些行被执行过&#xff0c;哪些分支被采取过&#xff0c;以及哪些函数被调用过。这对于软件开发者来说是一个…

Spring AOP原理详解:动态代理与实际应用

1. Spring AOP概述 1.1 什么是AOP AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&#xff09;是一种编程范式&#xff0c;旨在将横切关注点&#xff08;Cross-Cutting Concerns&#xff09;从业务逻辑中分离出来。横切关注点是指那些分散在应用程序多…

Android基础-Service的介绍

在Android系统中&#xff0c;Service是一个重要的后台组件&#xff0c;用于执行长时间运行的操作&#xff0c;而不需要提供用户界面。以下是对Service的功能、作用以及生命周期的详细介绍。 Service的功能和作用 后台执行&#xff1a; Service允许应用程序在后台执行操作&…

【数据结构】AVL树——平衡二叉搜索树

个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 祝福语&#xff1a;愿你拥抱自由的风 目录 二叉搜索树 AVL树概述 平衡因子 旋转情况分类 左单旋 右单旋 左右双旋 右左双旋 AVL树节点设计 AVL树设计 详解单旋 左单旋 右单旋 详解双旋 左右双旋 平衡因子情况如…

阿里开源React应用动效解决方案:ant-motion

ant-motion&#xff1a;简化动效开发&#xff0c;提升用户体验 - 精选真开源&#xff0c;释放新价值。 概览 Ant Motion是由Ant Design团队精心打造&#xff0c;专为React应用设计的动画规范和组件库。它不仅仅是一套动画规范&#xff0c;更是一个完整的解决方案&#xff0c;旨…

C# yolov8 TensorRT Demo

C# yolov8 TensorRT Demo 目录 效果 说明 项目 代码 下载 效果 说明 环境 NVIDIA GeForce RTX 4060 Laptop GPU cuda12.1cudnn 8.8.1TensorRT-8.6.1.6 版本和我不一致的需要重新编译TensorRtExtern.dll&#xff0c;TensorRtExtern源码地址&#xff1a;https://githu…

2024年JAVA、C++、Pyhton学哪种语言更容易进国央企?

对于不同编程语言在进入国有企业的观点大体是正确的&#xff0c;不过在实际选择时还需考虑一些因素。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信…

【CSDN独家公开】Python解析.SchDoc格式文件转换为json文件

前情提要 因工作需求&#xff0c;需要解析.SchDoc格式文件&#xff0c;提取文本和位置关系&#xff0c;通常方式是转换为图片或PDF&#xff0c;再进行OCR&#xff0c;但是这样识别精度太低了 Github找了好些项目&#xff0c;都不支持 PyAltium不支持 https://github.com/plu…

apexcharts数据可视化之饼图

apexcharts数据可视化之饼图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式&#xff1a; 基础饼图单色饼图图片饼图 基础饼图 import ApexChart from react-apexcharts;export function SimplePie() {// 数据序列const series [44, 55, 13, 43, 22]// …

AI大模型:掌握未知,开启未来

AI大模型的工作原理 AI大模型是指通过大量数据和复杂算法训练出的能够理解和生成自然语言文本的人工智能模型。它们背后的核心技术主要包括深度学习、神经网络和自然语言处理。以下是详细的工作原理以及通俗易懂的类比&#xff1a; 1. 数据收集和预处理 AI大模型的训练首先需…

【面试】什么是Java堆内存溢出?

目录 1. 概念2. 堆内存溢出的原因2.1 内存泄露2.2 堆内存设置过小2.3 大量对象创建2.4 静态集合类2.5 外部资源没有及时释放 3. 避免内存溢出的建议 1. 概念 1.Java堆内存溢出&#xff08;Java Heap Memory Overflow&#xff09;。2.是指Java虚拟机&#xff08;JVM&#xff09…

java —— 常用类

一、System 类 System 类内部的构造方法是 private 修饰的&#xff0c;所以不能实例化&#xff0c;普通方法均为静态方法。 &#xff08;一&#xff09;.currentTimeMillis() 括号内无参数&#xff0c;返回值为距离1970年1月1日0时0分0秒之间的毫秒数。 long timeSystem.cu…