1.引用
程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。
int ival=2;
int &refval=ival;
ival=8; //此时 refval=8;
int i=refval //i的值为8
int &refval; //报错:引用必须初始化
int &refval=10;//报错:引用类型的初始值必须是一个对象
double dval=9;
int &refval2=dval;//报错:引用类型的初始值必须是一致,是int.
2.指针
指针本身就是一个对象,允许对指针赋值和拷贝,而且指针的生命周期内它可以先后指向几个不同的对象
指针无需在定义时赋初值。和其他内置类型一样,在块作用域内定义的指针如果没有初始化,也将拥有一个不确定的值。
int ival=9;
int *p=&ival;
double dval;
double *pd=&dval; //正确:初始值是double型对象的地址
double *pd2=pd; //正确:初始值是指向double对象的指针
指针值:
1.指向一个对象。
2.指向紧邻对象所占空间的下一个位置。
3.空指针,意味着指针没有指向任何对象。
4.无效指针,也就是上述情况之外的其他值。
指针访问对象
int ival=9;
int * p=&ival;//p存放着变量ival的地址,或者说p是指向变量ival的指针。
cout<<*p //由符号*得到指针p所指向的对象,输出9.
int *p1=nullptr; //等价于int *p1=0;
int *p2=0;//直接将p2初始化为字面常量0
指针使用例子
#include "stdafx.h" #include <iostream> using namespace std; void Swap(int *x,int * y) { *x^=*y; *y^=*x; *x^=*y; } int _tmain(int argc, _TCHAR* argv[]) { int a=6; int b=8; Swap(&a,&b); cout<<"a="<<a<<endl; //a=8 cout<<"b="<<b<<endl; //b=6 system("pause"); return 0; }
char* str = "hello"; while (*str != '