`

【原创】c++学习笔记三

    博客分类:
  • c++
 
阅读更多
数组和指针
现代 C++ 程序应尽量使用 vector 和迭代器类型,而避免使用低级的数组
和指针。设计良好的程序只有在强调速度时才在类实现的内部使用数组和指针。
数组的显著缺陷在于:数组的长度是固定的,而且程序员无法知道一个给定数组的长度。
数组定义中的类型名可以是内置数据类型或类类型;除引用之外,数组元素的类型还可以是任意的复合类型。没有所有元素都是引用的数组。
can't assign one array to another
如果必须在数组中添加新元素,程序员就必须自己管理内存:
要求系统重新分配一个新的内存空间用于存放更大的数组,然后把原数组的所有元素复制到新分配的内存空间中。
可用下标或指针来遍历数组。
在指向数组元素的指针上使用解引用操作符 *(dereferenceoperator)和自增操作符 ++(increment operator),对指针进行解引用操作,可获得该指针所指对象的值。而当指针做自增操作时,则移动指针使其指向数组中的下一个元素。
指针的概念很简单:指针用于指向对象。与迭代器不同的是,指针用于指向单个对象,而迭代器只能用于访问容器内的元素。现代 C++程序采用 vector类型和迭代器取代一般的数组、采用 string 类型取代 C 风格字符串。一个有效的指针必然是以下三种状态之一:保存一个特定对象的地址;指向某个对象后面的另一对象;或者是 0 值。
若指针保存 0 值,表明它不指向任何对象。未初始化的指针是无效的,直到给该指针赋值后,才可使用它。
避免使用未初始化的指针
C++ 语言无法检测指针是否未被初始化,也无法区分有效地址和由指针分配到的存储空间中存放的二进制位形成的地址。建议程序员在使用之前初始化所有的变量,尤其是指针。
如果必须分开定义指针和其所指向的对象,则将指针初始化为 0或NULL。因为编译器可检测出 0 值的指针,程序可判断该指针并未指向一个对象。预处理器变量不是在 std 命名空间中定义的,因此其名字应为NULL,而非 std::NULL。
由于指针的类型用于确定指针所指对象的类型,因此初始化或赋值时必须保证类型匹配。
void* 指针
C++ 提供了一种特殊的指针类型 void*,它可以保存任何类型对象的地址。
void* 表明该指针与一地址值相关,但不清楚存储在此地址上的对象的类型。
void* 指针只支持几种有限的操作:与另一个指针进行比较;向函数传递
void* 指针或从函数返回 void* 指针;给另一个 void* 指针赋值。
4.2.3. 指针操作
* 操作符(解引用操作符)将获取指针所指的对象,
指针和引用的比较
第一个区别在于引用总是指向某个对象:定义引用时没有初始化
是错误的。第二个重要区别则是赋值行为的差异:给引用赋值修改的是该引用所
关联的对象的值,而并不是使引用与另一个对象关联。
引用一经初始化,就始终指向同一个特定对象(这就是为什么引用必须在定义时初始化的原因)
指向指针的指针
指针本身也是可用指针指向的内存对象。指针占用内存空间存放其值,因此指针的存储地址可存放在指针中。
C++ 语言中,指针和数组密切相关。特别是在表达式中使用数组名时,该名字会自动转换为指向数组第一个元素的指针.
使用指针的算术操作在指向数组某个元素的指针上加上(或减去)一个整型数值,就可以计算出指向数组另一元素的指针值.
通常,在指针上加上(或减去)一个整型数值 n 等效于获得一个新指针,该新指针指向指针原来指向的元素之后(或之前)的第 n 个元素。
C++ 允许计算数组或对象的超出末端的地址,但不允许对此地址进行解引用操作。而计算数组超出末端位置之后或数组首地址之前的地址都是不合法的。
不能使用 void* 指针(第 4.2.2 节)保存 const 对象的地址,而必须使
用 const void* 类型的指针保存 const 对象的地址.
允许把非 const 对象的地址赋给指向 const 对象的指针
重要的是要记住:不能保证指向 const 的指针所指对象的值一定不可修改
在实际的程序中,指向 const 的指针常用作函数的形参。将形参定义为指
向 const 的指针,以此确保传递给函数的实际对象在函数中不因为形参而被修
改.
C++ 语言还提供了 const 指针——本身的值不能修改.const 指针也必须在定义时初始化.
string const s1;
const string s2;
这两个s1,s2类型是一样的,都表示const的string类型。










分享到:
评论

相关推荐

    C++学习笔记【原创】

    【C++学习笔记【原创】】是一份作者个人长期积累的C++学习心得与经验总结,旨在为初学者提供一个参考的学习路径。这份笔记涵盖了C++的基础知识、编程技巧以及函数语法等多个方面,帮助读者逐步掌握这门强大的编程...

    《C++ Templates 中文版》笔记

    这份笔记结合了书本内容的摘录和作者个人的理解,其中包含了7章原创内容以及14章从CSDN网站上整理摘抄的部分,这些章节可能有所重叠,但无疑为学习者提供了丰富的资源。 C++模板是C++语言中的一个强大工具,它允许...

    C++菜鸟总结

    了解函数的声明、定义、参数传递以及如何返回值是学习C++的关键步骤。 3. **数组与指针**:数组是一组相同类型的数据集合,而指针是存储内存地址的变量。理解指针的概念,掌握指针运算和动态内存分配(如malloc, ...

    iOS开发教程(大神原创笔记)

    ### iOS开发教程(大神原创笔记)核心知识点详解 #### 一、Unix相关知识点 **1. Unix指令:** - **pwd**:用于显示当前所在目录的位置。 - **ls**:列出当前目录下的所有文件及文件夹。 - **ls –l**:以详细...

    MongoDB学习笔记(一) MongoDB介绍与安装方法

     最近开始学习非关系型数据库MongoDB,却在博客园上找不到比较系统的教程,很多资料都要去查阅英文网站,效率比较低下。本人不才,借着自学的机会把心得体会都记录下来,方便感兴趣的童鞋分享讨论。部分资源出自...

    PAT甲级所有代码.7z

    3. **C++**:这是PAT甲级竞赛中常用的编程语言,它支持面向对象编程,功能强大,适用于实现复杂算法。 4. **算法笔记**:这些代码可能包含了各种算法的实现,如排序算法(冒泡排序、快速排序、归并排序等)、搜索...

    LearningNotes:Java学习笔记,主要来源于B站上视频的学习,同时会记录平时一些学习和项目中遇到的问题,同步更新在蘑菇博客,如果对我的博客网站感兴趣的话,欢迎关注我的 蘑菇博客项目 笔记主要涵盖:Java,Spring,SpringCloud,计算机网络,操作系统,数据结构,Vue等 如果笔记对您有帮助的话,欢迎star支持,谢谢~

    陌溪的学习笔记 关于我 陌溪 是一个从三本院校一路摸滚翻爬上来的程序员。目前就职于 字节跳动的Data广告部门,是字节跳动全线产品的商业变现研发团队。这两天创建了一个 微信公众号【陌溪教你学编程】,未来将会在...

    原创记事本

    总的来说,这个压缩包提供了一个完整的、原创的记事本项目的实例,对于想要学习编程尤其是文本编辑器开发的初学者来说,是一个宝贵的资源。通过这个项目,你可以了解到软件的基本架构、文件处理、用户界面设计等多个...

    leetcode合法表达式-CPP_Practice:本仓库是面向C/C++技术方向的基础知识总结,包括语言、程序库、数据结构、算法、系统、网

    由于本人水平有限,仓库中的知识点有来自本人原创、读书笔记、书籍、博文等,非原创均已标明出处,如有遗漏,请 向issue 提出。此仓库引用于issue! 只面向初学者用于学习参考~ :bookmark_tabs: 目录 :plus: C/C++ ...

    iOS开发教程(大神笔记)

    描述:"大神原创的iOS开发教程,内容全面,覆盖OC及iOS开发全部技术细节内容,值得认真学习" 标签:"iOS 移动开发 Objective-C iOS开发 教程" 部分内容: 1. iOS开发基础介绍:开发者拥有丰富的Android、iOS、PHP和...

    SharpGLWPFApplication1.zip

    因此我在做三维姿态上位机过程中,又学习了一下SharpGL,当然很感谢官方的源码例程,基本所有的操作都是跟着官方例程来的。在这里分享一下: ———————————————— 版权声明:本文为CSDN博主「川北97...

    UBB-Mathematics-and-Computer-Science

    7. **项目或研究**:可能包含学生或教师进行的原创性研究,比如基于C++的软件开发项目。 8. **源代码**:如果涉及软件开发,这里可能会有C++项目的源代码,展示实际编程实践。 9. **论坛或讨论区**:可能有一个交互...

    程序设计大赛策划方案.pdf

    此策划方案主要分为三个阶段:资格赛、代码书写阶段和代码评分阶段,旨在全面评估学生的编程能力和创新能力。 1. **资格赛阶段**: - 目的是筛选出具有基础编程能力的学生,比赛形式为笔试,涵盖C语言或Java的基础...

    算法设计与分析.pdf

    3. **马特罗伊德和独立性**:马特罗伊德是一个抽象的组合系统,它概括了许多其他数学对象(如向量空间和图形)中的“独立”概念。这一章节探讨了马特罗伊德的定义和性质,以及它们在算法设计中的应用。 4. **深度...

    程序设计大赛策划方案.docx

    - 三等奖:3队,每队奖金100元。 - **优秀奖**:两组共5队,每队奖励50元。 #### 四、其他注意事项 - **声明**:主办单位对获奖作品享有使用权。 - **时间表**:包括资格赛、代码书写和评分三个阶段的具体时间...

    自己开发的俄罗斯方块

    标题 "自己开发的俄罗斯方块" 暗示了这是一个由个人或小团队独立完成的电子游戏项目,其中主要的编程语言可能是C++、Python、Java等,因为这些语言广泛用于游戏开发。俄罗斯方块是一款经典的休闲游戏,其基本原理是...

    蓝桥杯试题及参考答案欢迎使用

    它分为多个级别,如初级、中级和高级,涵盖C/C++、Java、Python等编程语言,以及数据结构、算法分析等多个IT领域的知识。试题通常会包括选择题、填空题和编程题,涉及的内容广泛且深入。 "蓝桥杯试题及参考答案欢迎...

    USTC课程:中国科学技术大学课程资源

    中国科学技术大学课程资源本仓库收录中国科学技术大学众多课程资源的笔记,总结,经验等学生原创内容目录索引版权说明本仓库分享资料遵守其创作者之规定,由同学自愿投稿,仅接收学生原创的或获得授权的资源。...

Global site tag (gtag.js) - Google Analytics