声明
int *ipl,*ip2; // ipl和 ip2 都是指向 int 型对象的指针
double dp,*dp2; // dp2是指向 double型对象的指针,dp是double 型对象
因为引用不是对象,没有实际地址,所以不能定义指向引用的指针。
指针值
指针的值(即地址)应属下列4种状态之一:
- 指向一个对象。
- 指向紧邻对象所占空间的下一个位置。
- 空指针,意味着指针没有指向任何对象。
- 无效指针,也就是上述情况之外的其他值。
试图拷贝或以其他方式访问无效指针的值都将引发错误。编译器并不负责检查此类错误,这一点和试图使用未经初始化的变量是一样的。访问无效指针的后果无法预计,因此程序员必须清楚任意给定的指针是否有效。
尽管第2种和第3种形式的指针是有效的,但其使用同样受到限制。显然这些指针没有指向任何具体对象,所以试图访问此类指针(假定的)对象的行为不被允许。如果这样做了,后果也无法预计。
空指针
一下都是空指针。
int *pl = nullptr; //等价于int *pl =0;
int *p2 = 0; //直接将 p2初始化为字面常量 0
//需要首先#include cstdlib
int *p3=NULL; //等价于int *p3 =0;
建议初始化所有的指针,并且在可能的情况下,尽量等定义了对象之后再定义指向它的指针。如果实在不清楚指针应该指向何处,就把它初始化为 nullptr 或者 0, 这样程序就能检测并知道它没有指向任何具体的对象了。
指针操作
如果指针的值是0(nulptr),条件取false。任何非0(nulptr)指针对应的条件值都是 true。
指针相等(==)的情况,两个指针存放的地址值相同(两个指针相等)有三种可能:
- 它们都为空
- 都指向同一个对象
- 或者都指向了同一个对象的下一地址。
需要注意的是,一个指针指向某对象,同时另一个指针指向另外对象的下一地址,此时也有可能出现这两个指针值相同的情况,即指针相等。 // 另外一个指针的下一个对象,刚好指向同一个对象。
void *
void*指针能做的事儿比较有限:**拿它和别的指针比较、作为函数的输入或输出,或者赋给另外一个 void*
指针 **。
不能直接操作 void*
指针所指的对象,因为我们并不知道这个对象到底是什么类型,也就无法确定能在这个对象上做哪些操作。
《C++ Primer》 P50 标签:初始化,指向,对象,void,C++,int,指针 From: https://www.cnblogs.com/huvjie/p/18409984