定义: 指针是指向另外一种类型的复合类型,与引用类似。但是相比于引用,指针本身就是一个对象,允许对指针进行赋值和拷贝
并且在指针的生命周期内可以分别指向不同的对象(按照本人的理解,我认为指针是存放一个对象地址的容器,所以和其他int a,
int b,int c之类的一样,指针存放的内容可以被覆盖)。其次指针不需要在定义的时候初始化,但是和其他类型一样,在块作用域内定义
的指针如果没有被初始化,也将拥有一个不确定的值------------------以上内容节选自C++Primer第五版
定义格式:变量类型 *变量类型 例: int *p;或者int *p=&a;
这里的‘&’在指针中是取地址符号,表示指针存放a这个对象的地址也就是指针p指向a
赋值:指针的赋值有两种,第一种是改变指向的对象,第二种是改变自己指向的对象的内容
例一,改变指向的对象:int *p=&a; p=&b; 这里p一开始是指向a,然后b将自己的地址赋给p,之后p就指向了b
例二,改变指向对象的内容:int a=5; int *p=&a; *p=10; 这里如果输出a那么a的值会变为10.因为*p访问了a的内容并改变了他
指针值:指针的值(即地址)应属于下列四种状态之一
1、指向一个对象
2、指向紧邻对象所占空间的下一个位置
3、空指针,意味着指针没有指向任何对象
4、无效指针,也就是上述情况之外的其他值 ----------参考C++Prmer
例:一个牛客上的指针小题
int a=7,b=8,*p,*q,*r;
p=&a;
q=&b;
r=p;p=q;q=r;
cout<<*p<<*q<<a<<b; //结果 *p=8,*q=7,a=7,b=8;
一句话概括就是,指针r交换了指针p和q的地址,但是没有改变a,b的值。
空指针:
定义方式:int*p1=nullptr;//这是C++11标准引入的一种办法
int *p2=0;
调用#include<cstdlib>
int *p3=NULL;//等价于int *p3=0;