引用
为对象起了另外一个名字
通过将声明符&d的形式来定义引用类型,d为声明的变量名
int ival=1024;
int &refVal=ival;//rafVal指向ival(是ival的另外一个名字)
int &refVal1;//报错,引用必须初始化
refVal=2;//把2的值赋值给了refaVal指向的对象,即ival=2
//以引用作为初始值实际上是以与引用绑定的对象作为初始值
int i=refVal;
//引用本身不是一个对象,所以不能定义引用的引用
int &refVal14=10;//引用类型的初始值必须是一个对象
double dval=3.14;
int &refVal15=dval;//引用类型的初始值必须为int型
指针:指向另外一种类型的符合类型
1.指针本身就是一个对象,允许对指针赋值和拷贝
2.指针无须在定义时赋初值
定义指针类型的方法将声明符写成*d的形式,d为变量名
int *ip1,*ip2;//ip1,ip2都是指向int型对象的指针
double dp ,*dp2;//dp2是指向double类型对象的指针,dp是double型的对象
指针存放某个对象的地址,若要获取该地址,需要使用地址符(&)
int ival=42;
int*p=&ival;//p存放变量ival地址或者说p是指向变量ival的指针
因为引用不是对象,没有实际地址,所以不能定义指向引用的指针
double dval;
double *pd=&dval;//正确,初始值为double型对象的地址
double *pd2=pd;//正确,初始值是指向double型对象的指针
int*pi=pd;//错误,指针pi的类型和pd类型不匹配
pi=&dval;//错误,不能把double类型的地址赋给int型的指针
指针的值(即地址)应属于下列4种状态之一:
1.指向一个对象
2.指向紧邻对象所占空间的下一个位置
3.空指针,以为着指针没有指向任何对象
4.无效指针,上述情况之外的其他值
利用指针访问对象
使用解引用符(*)来访问
int ival=42;
int*p=&ival;
cout<<*p;//由*得到p所指对象
*p=0;
cout<<*p;//0 如果给解引用的结果赋值,实际上也是给指针所指对象赋值