从C++primer中文第五版2.3节 复合类型开始
1、复合类型是指基于其他类型定义的类型。引用和指针就是C++中的复合类型。
2、引用:为一个已经存在的对象所起的另外一个名字。
引用引用不是对象,它只能绑定在对象上;
引用时必须被初始化;
绑定后一直绑在一起;
一般,引用的类型和所绑定的对象类型相匹配。
定义的时候需要用&,但使用的时候不像指针一样要带*,引用使用的时候不需要带&号。
3、指针有别于引用的地方
指针本身是个对象,允许对指针进行赋值和拷贝;
指针生命周期内可以指向不同的对象;
指针定义时无须赋初值;
指针和其他内置类型一样,在块作用域内定义时如果没有被初始化,也将拥有一个不确定的值。
4、指针值
指向一个对象
指向紧邻对象所占空间的下一个位置。(常用在数组中)
空指针,即没有指向任何对象
无效指针,即上述三种情况以外的指针
5、对于上述指针的四个值,访问无效指针将会引发错误,但是编译器不负责检查此类错误;第二三种指针虽然是有效的,但是访问他们是不允许的,否则引发的后果无法预计。
6、如果指针指向了一个对象,则允许使用解引用符(操作符*)来访问该对象。给解引用的结果赋值,实际上是给指针所指的对象赋值。解引用操作仅适用于那些确实指向了某个对象的有效指针。
7、生成空指针的三种办法:
int *p = nullptr; //C++11新特性,推荐使用
int *p = 0;
int *p = NULL; //需#include cstdlib,尽量避免使用
8、建议初始化所有的指针,并且在可能的情况下,尽量等定义了对象之后再定义指向它的指针。
9、指针的操作
指针的改变还是变量的改变
条件运算中,0指针为false,非0指针为true
比较运算中...
注:指针的操作都需要是合法指针。
10、void* 是一种特殊类型的指针,可用于存放任意对象的地址。一个void* 指针存放着一个地址,我们对该地址中到底是什么类型的对象并不了解。
未完待续...