第7章:pointers,arrays and references

1: 在c++中,我们能够通过对象名字访问一个对象。但与此同时,存储在内存中的对象在内存中有一个具体地址,因此我们也能够通过该具体地址访问该对象,指针存储着内存地址。

2:在c++旧标准中,我们使用0或者是NULL来表示零指针,零指针表示该指针不指向任何对象。当我们使用0来表示零指针时,它很容易与整形的0混淆;NULL是个宏,一般来说在c++中NULL被如下定义:#define NULL 0,然后在不同的执行环境下,NULL的定义可能略有不同,NULL或许是0也或许是0L,并且由于这个宏定义,我们也可用用NULL给整形变量赋初值0,这就违背了它涉及的初衷了,并且在c语言中,NULL被定义为#define NULL void(*)0,这使得在c++中使用它给具有具体类型的指针赋初值是不合法的,如int* p=null (error)。因此在c++11新标准中,我们提倡使用nullptr来表示零指针,同时要注意的是nullptr可以给各种类型的指针赋值,并不是说每种类型的零指针都有一个各自的零指针。

3: 当我们通过编译器输出指针的地址值时,这个值是用十六进制表示的整型常量,也就是以0x开头。

4:指向相同类型数组的指针之间能够做减法操作,指针之间的加法操作为定义。同时指向数组的指针也能够加一个整数或者是减一个整数,但若其结果超出了数组范围,则对该指针的解引用是未定义的。复杂的指针算术操作应该被避免。一般在c++中,我们会使用vector容器类型代替数组的使用。

5:用T代表类型,const T *p=p0,在这里表示的是指针p指向的对象值不能被更改,如*p=T()就会出现编译错误,但p=p1正确。T *const p=p0表示的是指针p0存储的地址值不能被更改,但其所指向的对象的值能够被更改,因此*p=T()正确,但p=p1就会出现编译错误。

6:在c++新标准中,引用分为左值引用,const 引用和右值引用。

1. 左值:左值可以出现在赋值表达式的左边或右边,有固定的内存地址,如变量;

2. 右值:只能出现在赋值表达式的右边,不能被赋值,如字面值常量和在表达式求值过程中创建的临时对象。右值引用有一个重要性质是其只能绑定到一个将要销毁的对象,因此我们可以自由的将一个右值引用的资源移动到另一对象中。

3. const 引用:const 引用即可以绑定到相同类型的对象(左值),又可以绑定到不同但相关的类型的对象(左值),同时还可以绑定到右值。

4. 引用不是一个对象,因此不能用数组表示引用的集合,如`vector<string&>,string& a1[]`这样的表示是错误。
时间: 2024-10-06 15:41:26

第7章:pointers,arrays and references的相关文章

《C++程序设计语言(英文第四版)》【PDF】下载

<C++程序设计语言(英文第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382177 内容简介 本书是C++领域经典的参考书,介绍了C++11的各项新特性.功能等.主要内容包括:C++的类型.对象.作用域.存储.计算基础及模块化知识.命名空间.源文件以及异常处理等:C++的抽象性,包括类.类继承.模版等:标准库,包括容器.算法.迭代器.字符串.流I/O以及C++的基本内存模型等. 编辑推荐 C++语言之父的经典名著新版本,全面

SWIG 3 中文手册——9. SWIG 库

目录 9 SWIG 库 9.1 %include 指令与库搜索路径 9.2 C 数组与指针 9.2.1 cpointer.i 9.2.2 carrays.i 9.2.3 cmalloc.i 9.2.4 cdata.i 9.3 C 字符串处理 9.3.1 默认字符串处理 9.3.2 传递二进制数据 9.3.3 使用 %newobject 释放内存 9.3.4 cstring.i 9.4 STL/C++ 库 9.4.1 std::string 9.4.2 std::vector 9.4.3 STL

Android调用JNI本地方法经过有点改变

方法注册好后要经过哪些路 Android一个异常捕获项目 https://github.com/xroche/coffeecatch coffeecatch CoffeeCatch, a tiny native POSIX signal catcher (especially useful for JNI code on Android/Dalvik, but it can be used in non-Java projects) It allows to "gracefully"

C++ Core Guidelines

C++ Core Guidelines September 9, 2015 Editors: Bjarne Stroustrup Herb Sutter This document is a very early draft. It is inkorrekt, incompleat, and pµøoorly formatted. Had it been an open source (code) project, this would have been release 0.6. Copy

二维数组做函数参数、指向指针的指针做函数参数

这里有一篇文章  写的很好http://blog.csdn.net/f81892461/article/details/8974087 该文章中有一句话  总之就是:数组无法作为参数,总会被编译器将地址赋值给形参指针的,即使指针定义成数组形式,也还是指针.然后各种差别都是由数组和指针不同的定位元素的方式导致的. 这句话说的很对啊,数组做形参的是时候都是被当成指针来处理的.不明白这句话的可以看一下,参考文章链接里的那幅图,注意比较一下下图中的两个:data+1,第一个data+1指向的是元素dat

Android代码书写规范

1.资源文件命名规则2.类名文件命名规则3.尽量少用枚举4.public方法.重要逻辑.主要类结构体必须注释,其他部分可自定注释5.提交代码必须描述清楚修改内容,如果一次提交内容过多,拆分功能进行多次提交,尽量保持每次提交功能修改单一原则6.类文件尽量不超过300行,方法尽量不超过一个屏幕7.切忌在功能未完成时做过多类文件的重构8.坚持以上7点,成为优秀码农 ############################################################# Android

Windows kernel pool 初探(2014.12)

Windows kernel pool 1. 简介 Kernel pool类似于Windows用户层所使用Heap,其为内核组件提供系统资源.在系统初始化的时候,内存管理模块就创建了pool. 严格的来说,pool只分为nonpaged pool和paged pool两类. nonpaged pool: 只能常驻于物理内存地址,不能映射.(reside in physical memory at all times and can be accessed at any time without

Git详解之九 Git内部原理

来自:http://www.open-open.com/lib/view/open1328070620202.html Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式.我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的,不过也有人认为这些内容对于初学者来说可能难以理解且过于复杂.正因如此我把这部分内容放在最后一章,你在学习过程中可以先阅 读这部分,也可以晚点阅读这部分,这完全取决于你自己. 既然已

Constructors for mutable and const versions of an iterator class

According to section 3.2 of the book "Generic Programming and STL", it is recommended to define both mutable and const versions of an iterator class. However, the constructors provided in the example code are still not perfect because some cases