1.pointer既可以指向一个对象又可以指向NULL,但reference必须指向一个对象;
例如:char *p=NULL;//可以
char &p=NULL;//错了
2,reference不用判断是否为空,但pointer要。
例如:void print(const int &p)
{cout<<p;}
void print(const int *p)
{if(p) cout<<*p;}
3,pointer可以重新赋值,但reference总是指向最初获得那个对象。
例如:string s1("name1");
string s2("name2");
string &p1=s1;
string *p2=&s1;
p1=s2;//p1还是指向s1
p2=&s2;//p2指向s2
4,最好总是令operator[]的返回值为reference
例如vector<int> v(10);
v[5]=10;
如果operator[]返回pointer,则上面的v[5]=10要学成*v[5]=10;