`
evasiu
  • 浏览: 170449 次
  • 性别: Icon_minigender_2
  • 来自: 广州
博客专栏
Fa47b089-e026-399c-b770-017349f619d5
TCP/IP详解卷一>阅读...
浏览量:12596
社区版块
存档分类
最新评论

c++ premier -- 数组与指针

 
阅读更多

读完这一章,最大的收获就是之前对string和字符串(文中称为c风格字符串)的混淆,那个时候很懒的,在string和char*之间相互赋值转换时,如果成功了就成功了,不成功就都换成char*,也不知道是怎么回事,也不去研究是怎么回事。另外,好像我突然明白了多维数组的分析,之前看C专家编程的时候感觉记不下来,其实就是我没有很理解。

 

第4章的篇头的这段话我觉得很有意味,“C++语言提供了两种类似于vector和迭代器类型的低级复合类型 -- 数组和指针。与vector类型相似,数组也可以保存某种类型的一组对象;而它们的区别在于,数组的长度是固定的。数组一经创建,就不允许添加新的元素。指针则可以像迭代器一样用于遍历和检查数组中的元素。”

 

1. 指针

指针保存的是另一对象的地址。一个有效的指针必须是以下三种状态这一:(1)保存一个特定的地址;(2)指向某个对象后面的另一个对象;(3)0值(即null),不指向任何对象。对于第二种怦,我不是很理解,在后面的讲解中,我猜测,是不是指的像一个指向数组的指针,加了一个值后,变成了指向“某个对象后面的另一对象”了?

另外还有一个概念上的澄清,设int a[10] = {0}, int* p = a, 当我们使用p时,使用的是p中保存的地址,p是一个指针;当我们使用*p时,叫做p的解引用(dereference),使用(也包括修改)的是p中保存的地址中的数据。以前看到“解引用”这样的名词,我都觉得有些惴惴不安,因为我不确定是什么意思,呵呵。

 

2. 指针和引用(&)的区别

虽然引用和指针都可间接访问另一个值,但是它们之间有两个重要区别。(1)引用总是指向某个对象:定义引用时没有初始化是错误的。(2)赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联。引用一经初始化,就始终指向同一个特定对象。例如:

int ival = 1024, ival2 = 2048;
int* p1 = &ival, *p2 = &ival2;
//赋值结束后,p1所指向的ival对象值不变,赋值操作修改了p1指针的值
//使其指向另一个不同的对象
p1 = p2; 

//下面的赋值操作修改了r1引用的值ival对象,而非引用本身。
//赋值结束后,这两个引用还是分别指向原来关联的对象,此时这两个对象的值相等
int &r1 = ival, &r2 = ival2;
r1 = r2;

 

3. 指针和const限定符

指针和const限定符之间的有两种交互类型:指向const对象的指针和const指针。

 

我们经常使用指针来修改其所指对象的值。但是,如果指针指向const对象,则不允许用指针改变其所指的const值。为了保证这个特性,c++语言强制要求指向const对象的指针也必须具有const特性。(这与之前的引用一样)

允许把非const对象的地址赋值给指向const对象的指针,这时不能通过该指针去修改对象的值,但可以通过其他指向该对象的指针去修改该对象。可以把指向const的指针理解为“自以为指向const的指针”。

 

const指针指的是指针本身的值不能改变,也就是它将一直指向一个特定的对象,该对象如果不是const的则该对象是可以被修改的。(突然想到,这个指针应该可以释放吧?释放后这个指针会变成怎么样的呢?-- 尝试了一下,可以释放,但是这个指针再也不能被赋给其他人了)

 

关于它们的书写方式,也是挺容易让人混淆的,

const double pi = 3.14;
double *ptr = π  //error: ptr is a plain pointer
const double* ptr = π //ok: ptr is a pointer to const

int errNumb = 0;
int *const curErr = &errNumb; //curErr is a const pointer
curErr = curErr; //error: curErr is a const pointer, it can't be assigned again

 

4. 指针和typedef

在typedef中使用指针往往会带来意外的结果。下面是一个几乎所有人刚开始时都会答错的问题(确实):

typedef string *pstring;
const pstring cstr;

 请问cstr是什么类型的?(我把pstring换成string*,然后分析得出,cstr是一个指向string类型的const对象的指针。结果是错的。)

错误的原因在于将typedef当做文本扩展了。声明string pstring时,const修饰的是pstring类型,这是一个指针,因此,该声明应该是把cstr定义为指向string类型对象的const指针。这个定义等价于:

string *const cstr;

 

阅读const声明语句产生的部分问题,源于const限定符既可以放在类型前面也可以放在类型后,

string const s1; 和 const string s1是一样的。

上面的语句,如果写成pstring const cstr,做文本扩展的时候就变成string* const cstr了。所以最重要的,还是得把pstring看成一个整体。

 

5. 动态数组

“数组类型的变量有三个重要的限制:数组长度固定不变,在编译时必须知道其长度,数组只在定义它的块语句内存在。”为什么要摘录这句话呢?因为它提醒了我数组在程序内存中是在什么地方(数组应该是在静态存储区或栈上),当数组不是全局变量时,比如是在函数里,离开该函数后数组就不在了。而动态数组则不一样,它是分配在堆上的,动态分配的数组将一直存在,直到程序显式地释放它。

另外,释放数组的时候应该是

int* pia = new int[10];
delete [] pia;

 关键字delete和指针之间的空方括号是必不可少的:它告诉编译器该指针指向的是自由存储区中的数组,而并非单个对象。

 

6. 混合使用标准库类string和C风格字符串

由于C风格字符串与字符串字面值具有相同的数据类型,而且都是以null结束,因此可以把c风格字符串用在任何可以使用字符串字面值的地方:

(1)可以使用C风格字符串对string对象进行初始化或赋值

(2)string类型的加法操作需要两个操作数,可以使用c风格字符串作为其中的一个操作数。

但是反之则不成立:在要求c风格字符串的地方不可以直接使用标准库string类型对象。但是string类提供了一个名为c_str() 的成员函数实现我们的要求:

const char* str = st2.c_str();    //查看c_str()的声明,可以发现其返回的是一个指向const char的指针

 

7. 指针和多维数组

定义指向数组的指针与如何定义数组本身类似:首先声明元素类型,后接(数组)变量名字和维数。窍门在于(数组)变量的名字其实是指针,因此需要在标识符前加上*。

int *ip[4]; //包含4个指向int的指针数组
int (*ip) [4]; //指向包含有4个int元素的数组的指针

 下面的图是从C专家编程里借过来的:

可以用下面任何一种方法为int apricot[2][3][5]在内存中定位:

 

 

  • 大小: 32.8 KB
分享到:
评论

相关推荐

    c++ premier 第四版 课后习题答案+所有源代码

    在《C++ Primer 第四版》中,读者将学到如何使用基本数据类型、控制结构、函数、数组和指针来构建程序;了解类和对象的概念,以及封装、继承和多态等面向对象特性;掌握模板的使用,包括函数模板和类模板,以及STL中...

    《C++ Primer》 要点总结.pdf

    C++ Primer是一本经典的C++编程语言入门书籍,本文档总结了C++ Primer的要点,涵盖了C++语言的基本概念、变量、数据类型、控制流、函数、数组、指针、引用、类型别名、自定义数据结构等方面。 1. 基本概念 C++语言...

    C Primer Plus 附录A 复习题答案

    了解指针与数组的关系,以及指针在函数参数中的应用。 8. **字符串处理**:熟悉字符串常量和字符数组的区别,掌握字符串处理函数如strlen、strcpy、strcat、strcmp等。 9. **结构体与联合体**:学习如何定义和使用...

    基于分时电价机制的家庭能量管理策略优化研究:考虑空调、电动汽车及可平移负荷的精细控制模型,基于分时电价机制的家庭能量管理策略优化研究:集成空调、电动汽车与可平移负荷管理模型,MATLAB代码:基于分时

    基于分时电价机制的家庭能量管理策略优化研究:考虑空调、电动汽车及可平移负荷的精细控制模型,基于分时电价机制的家庭能量管理策略优化研究:集成空调、电动汽车与可平移负荷管理模型,MATLAB代码:基于分时电价条件下家庭能量管理策略研究 关键词:家庭能量管理模型 分时电价 空调 电动汽车 可平移负荷 参考文档:《基于分时电价和蓄电池实时控制策略的家庭能量系统优化》参考部分模型 《计及舒适度的家庭能量管理系统优化控制策略》参考部分模型 仿真平台:MATLAB+CPLEX 平台 优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非常精品 主要内容:代码主要做的是家庭能量管理模型,首先构建了电动汽车、空调、热水器以及烘干机等若干家庭用户用电设备的能量管理模型,其次,考虑在分时电价、动态电价以及动态电价下休息日和工作日家庭用户的最优能量管理策略,依次通过CPLEX完成不同场景下居民用电策略的优化,该代码适合新手学习以及在此基础上进行拓展 ,核心关键词: 家庭能量管理模型; 分时电价; 电动汽车; 空调; 可平移负荷; 优化控制策略; 仿真平台(MATLAB+CPLEX); 深度创新性。,

    Delphi 12 控件之Winsoft PDFium Component Suite v7.4 for Delphi & CB 5-12 Athens Full Source.7z

    Winsoft PDFium Component Suite v7.4 for Delphi & CB 5-12 Athens Full Source.7z

    基于Matlab的草原生态管理策略研究:数学建模及E前四问问题分析思路,基于Matlab的草原放牧策略研究:数学建模与问题解决的前四问思路,基于Matlab的草原放牧的策略研究数学建模E前四问思路

    基于Matlab的草原生态管理策略研究:数学建模及E前四问问题分析思路,基于Matlab的草原放牧策略研究:数学建模与问题解决的前四问思路,基于Matlab的草原放牧的策略研究数学建模E前四问思路 ,基于Matlab的草原放牧策略研究; 数学建模; E前四问思路; 策略优化; 模型验证; 数据模拟。,Matlab草原放牧策略研究:数学建模E及前四问解析

    JSP基于SSH2新闻发布系统.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款,质量优质,放心下载使用

    LanSee175(局域网查看工具)

    主要功能 信息搜索:可快速搜索局域网中的计算机,获取计算机名、IP 地址、MAC 地址、所在工作组、用户等详细信息,还能搜索共享资源和共享文件,便于用户快速定位和访问所需资源。 网络嗅探:能够捕获 TCP、UDP、ICMP、ARP 等各种数据包,可嗅探局域网上的 QQ 号,查看各主机流量,还能从流过网卡的数据中嗅探出音乐、视频、图片等文件,帮助用户了解网络数据传输情况。 聊天与共享:具备局域网聊天和文件共享功能,无需服务器支持。用户可进行群聊或私聊,还能指定条件搜索其他用户共享的文件,方便局域网内的信息交流与资源共享。 计算机管理:可以向开启信使服务的计算机发送短消息,对于有相应权限的计算机,还能进行远程关闭或重启操作,方便网络管理员进行集中管理。 文件复制:支持复制网上邻居上的共享文件、LanSee 用户共享的文件以及通过网络嗅探功能嗅探出的文件,并且支持断点传输,提高文件复制的效率和稳定性。 端口与连接查看:可列出进程打开的所有网络端口以及连接情况,能快速扫描 TCP 端口,查看适配器信息,还能进行 Ping、Traceroute 等操作,帮助用户了解网络连接状态和诊断网络问题。

    迅雷软件下载原理介绍.md

    迅雷软件下载原理介绍.md

    最新更新!!!2024年HS编码出口退税率数据(2004-2024年)

    ## 01、数据简介 出口退税率是针对出口产品在国内已缴纳的税款,在货物报关出口后退还给出口企业时,按照一定比例计算的退税金额与计税价格之间的比率。 出口退税率是出口退税制度中的一个重要参数,它体现了国家对出口企业的税收优惠政策,有助于降低企业的出口成本,提升其在国际市场上的竞争力。同时,国家也会根据经济形势和国际贸易的变化,适时调整出口退税率,以更好地服务于国家的经济发展战略。 数据名称:2024年HS编码出口退税率数据 数据年份:2004-2024年 ## 02、相关数据 CODE、ST_DATE、END_DATE、ZHCMCODE、NAME、DWCODE、UNIT、BCFLAG、STDFLAG、DWFLAG、SZ、ZSSL_SET、CLDE、CJDL、TSL、SPLB、TSFLAG、NOTE。 ## 03、数据截图

    风机变桨控制FAST与MATLAB SIMULINK联合仿真模型:非线性风力发电机的PID独立与统一变桨控制策略对比研究,风机变桨控制FAST与MATLAB联合仿真研究:非线性风力发电机的PID独立与

    风机变桨控制FAST与MATLAB SIMULINK联合仿真模型:非线性风力发电机的PID独立与统一变桨控制策略对比研究,风机变桨控制FAST与MATLAB联合仿真研究:非线性风力发电机的PID独立与统一变桨控制在Trubsim 3D湍流风环境下的对比分析,风机变桨控制FAST与MATLAB SIMULINK联合仿真模型非线性风力发电机的 PID独立变桨和统一变桨控制下仿真模型,对于5WM非线性风机风机进行控制 链接simulink的scope出转速对比,桨距角对比,叶片挥舞力矩,轮毂处偏航力矩,俯仰力矩等载荷数据对比图,在trubsim生成的3D湍流风环境下模拟 统一变桨反馈信号是转速,独立变桨反馈是叶根载荷 提供包含openfast与matlab simulink联合仿真的建模 可以提供参考文献+模型+大佬交流群 ,核心关键词:FAST; MATLAB SIMULINK; 联合仿真模型; 非线性风力发电机; PID控制; 独立变桨; 统一变桨; 转速对比; 桨距角对比; 叶片挥舞力矩; 轮毂偏航力矩; 俯仰力矩; 3D湍流风环境; 建模; 参考文献; 模型交流群。,基于OpenF

    基于Unity,SenseAR的手势识别demo.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款,质量优质,放心下载使用

    jdk-8u441-windows-x64.zip

    java8版本的压缩包(windows)

    NMPC非线性模型预测控制:从原理到代码实践的全面解析,包含四项案例研究:自动泊车轨迹优化、倒立摆上翻控制、车辆运动学轨迹跟踪及四旋翼无人机轨迹跟踪,非线性模型预测控制在四个案例中的实践与应用:从原理

    NMPC非线性模型预测控制:从原理到代码实践的全面解析,包含四项案例研究:自动泊车轨迹优化、倒立摆上翻控制、车辆运动学轨迹跟踪及四旋翼无人机轨迹跟踪,非线性模型预测控制在四个案例中的实践与应用:从原理到代码实操指南,nmpc非线性模型预测控制从原理到代码实践 包含4个案例 1 自动泊车轨迹优化 2 倒立摆上翻控制 3 车辆运动学轨迹跟踪 4 四旋翼无人机轨迹跟踪 ,nmpc;非线性模型预测控制;原理;代码实践;案例;自动泊车轨迹优化;倒立摆上翻控制;车辆运动学轨迹跟踪;四旋翼无人机轨迹跟踪,NMPC非线性模型预测控制:原理与代码实践,四案例详解(含自动泊车、倒立摆、车辆轨迹跟踪及四旋翼无人机控制)

    Delphi 12 控件之Gnostice PDFToolkit v.5.0.0.860 for Delphi 11.7z

    Gnostice PDFToolkit v.5.0.0.860 for Delphi 11.7z

    CAD-Reader(cad快速看图)

    快速打开图纸:具有闪电般的启动速度,能快速打开各种版本的 DWG 图纸,让用户迅速开始查看和使用图纸。 显示完整准确:全面完整地显示布局、图案填充等内容,可自动匹配所有字体,有效解决中文乱码问题,能完美显示钢筋符号。 支持天正系列:是业内支持天正建筑、天正给排水、天正暖通、天正电气的 CAD 看图产品,方便建筑、给排水等相关专业人员查看和使用天正图纸。 便捷传图功能:内置 WiFi 直连电脑、云盘功能,方便用户在不同设备之间轻松传图,实现图纸的快速传输和共享。 多种操作功能:可添加各种注释,如线条、文字、图片等,还能精确扣点,方便用户对图纸进行标记和说明;具有所见即所得的打印方式,可自由设置打印范围;支持全屏看图,让用户获得更好的查看体验。 测量统计功能:能准确测量长度、半径、角度、弧长、坐标、多边形面积等,还可自动统计测量的长度和面积,可按颜色统计或手动统计,结果能导出表格。 高效协作功能:支持团队协同,用户可以在移动中处理工作,与合作伙伴随时沟通;可以捕获现场照片和录制语音消息并作为注释附加到图纸上,还能导入 / 导出图纸注释。

    单向手性光学腔的研究与应用 - Comsol的光学物理分析与实现,“Comsol模拟下的单向手性光学腔特性探究”,Comsol单向手性光学腔 ,核心关键词:Comsol; 单向手性; 光学腔; 模拟

    单向手性光学腔的研究与应用 - Comsol的光学物理分析与实现,“Comsol模拟下的单向手性光学腔特性探究”,Comsol单向手性光学腔。 ,核心关键词:Comsol; 单向手性; 光学腔; 模拟。,单向手性光学腔的Comsol模拟研究

    CDlinux镜像文件.zip

    目录: CDlinux_CE-0.9.5 CDlinux_CE-0.9.6.1 CDlinux_CE-0.9.7.1 CDlinux_mini-0.9.5 CDlinux_mini-0.9.6.1 CDlinux_mini-0.9.7.1 CDlinux-0.9.5.1 CDlinux-0.9.6.1 CDlinux-0.9.6 CDlinux-0.9.7.1 CDlinux-0.9.7 ........... 网盘文件永久链接

    基于maven的SSM整合 demo项目.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款,质量优质,放心下载使用

Global site tag (gtag.js) - Google Analytics