(1)指针的值(即地址)应属于下列4种状态之一:
a.指向一个对象;
b.指向紧邻对象所占空间的下一个位置;
c.空指针,意味着指针没有指向任何对象;
d.无效指针,也就是上述情况之外的其他值。
注:尽管“b”、“c”形式的指针是有效的,但其使用同样受到限制。显然这些指针没有指向任何具体对象,所以试图访问此类指针(假定的)对象的行
为不被允许,如果这样做了,后果无法预计。
(2)解引用操作符“*”,适用于那些确实指向某个对象的有效指针。
(3)生成空指针的几种方法:
a.int *p1 = nullptr; // c++11新引入的方法,它可以被转换为任意其他的指针类型。
b.int *p1 = 0;
c.int *p1 = NULL; // 需要先声明“#include cstdlib”
注:c++11中,尽量用“nullptr”,避免使用“NULL”。
(4)把int 变量直接复制给指针是错误的操作,即使int变量恰好等于0也不行。
(5)尽量在定义了对象之后,再定义指向它的指针。
(6)只要指针拥有一个合法值,就能将它用在条件表达式中,如果指针的值是0,条件取false;而任何非0指针对应的条件都是true.
(7)void*是一种特殊的指针,可用于存放任意对象的指针。
利用void*指针能做到事有限:
1)拿它和别的指针比较
2)作为函数的输入或输出、
3)或者赋给另外一个void*指针。
注:不能直接操作void*指针所指的对象,因为并不知道这个对象到底是什么类型。
(8)指针是对象,所以存在对指针的引用:
int i = 42;
int *p;
int *&r = p; // r是一个对指针p的引用
r = &i; // r引用了一个指针,因此给r赋值&i就是令p指向i.
注:要理解r 的类型到底是什么,最简单的方法是从右向左读取r的定义。离变量名最近的符号对变量的类型有最直接的影响,因此上文中r是一个引用。
声明符的其余部分用以确定r引用的类型是什么,因此上文中r引用的是一个指针。最后,声明的基本数据类型部分指出r引用的是一个int指针。

浙公网安备 33010602011771号