1.指向一个对象;
2.指向紧邻对象所占空间的下一个位置;
3.空指针,意味着指针没有指向任何对象;用字面值nullptr来初始化指针;
4.无效指针,也就是上述情况之外的其他值。
void* 可用于存放任意对象的地址;
试图拷贝或以其他方式访问无效指针的值都会引发错误。访问无效指针的后果无法预计,编译器也不负责检查此类错误,因此必须清楚任意给定的指针是否有效。
例如:
int i=42;
int *p=&i;// p存放着变量i的指针
cout<<*p;//由符号*得到指针p所指的对象,输出42;
*p=0;//由符号*得到指针p所指的对象,即给i赋值;
cout<<*p;//输出0
//
int i=4;
int *p1=0;//p1被初始化,但没有指向任何对象
int *p2=&i;//p2被初始化,存有i的地址
int *p3;//p3的值无法确定
p3=p2;//p3和p2指向同一个对象i
p2=0;//现在p2不指向任何对象
//指向指针的引用
int i=0;
int *p;
int*&r=p;//r是一个对指针p的引用
r=&i;//r引用了一个指针,因此给r赋值&i就是令p指向i
*r=0;//解引用r得到i,也就是p指向的对象,将i的值改为0;