C++ 指针
指针可以声明为*d的形式,d为变量名。
指针可以和引用一样实现对其他对象的间接访问,然而指针还有很多其他的属性。
指针本身是一个对象,允许对指针赋值和拷贝。
指针可以在生命周期内实现对不同对象的指定,这是引用无法做到的。
指针在定义时无需初始化。

获取对象的地址:

一般情况下(后面我们会讲两种特殊情况),指针类型和他所指对象的类型严格匹配


指针的值(也是地址)应属于一下四个状态之一:
1。指向一个对象
2。指向紧邻对象所占空间的下一个位置
3。空指针,意味着指针没有指向任何对象
4。无效指针,也就是上述情况外的其他值
试图操作无效指针都将引发错误,但是编译器并不会检查此类错误!
第二种和第三种指针没有指向具体对象,所以访问此类指针的对象不被允许,如果这么做了后果无法预计。
利用指针访问对象
我们用*(解引符)来访问指针所指的对象(如果有的话)


这里总结一下&和*的多重含义

空指针

nullptr可以被转换成任意其他的指针类型。
NULL为一个预处理变量,它的值就是0
预处理器
后面会详细介绍,现在我们可以知道它是运行于编译过程之前的一段程序就行了,预处理变量不属于命名空间std,由预处理器管理,因此我们可以直接使用而无需std::。
注意:
让int变量直接赋给指针是错误的操作,即使int变量恰好等于0

访问未经初始化的指针后果很难处理,因此建议初始化所有的指针。
赋值和指针

指针可以通过==或者!=来比较,同时一个指针指向某一个对象,同时另一个指针指向另一对象的下一个地址,两个指针也可能相等。(注:这里要用到指针的值,如果是非法指针后果将无法预测)
后面还会介绍更多关于指针的知识。(可见指针在C++中十分重要。。
void*指针
void*可以存放任意类型指针,看起来很炫酷但是这也让我们无法知道这个地址到底是个什么类型的对象。

关于void*在比较后面会有更详细的介绍。
练习:
改变指针的值和指针所指对象的值。

叙述下列代码的作用

(将p1和i绑定,同时将i变成i方

lp错误的原因
