Reference
1、reference 为object定义另一个可选名称:
int value = 1024;
int &rvalue =value;
以上两个语句都指向同一个对象,且value和rvalue对象的地址为同一个;
#include<iostream>
using namespace std;
int main(){
int value = 1024;
int value2 =2048;
int &rvalue =value;
value =2049;
cout<<&value<<"_"<<&value2<<"_"<<&rvalue<<endl;
cout<<value<<"_"<<rvalue<<endl;
return 0;
}
2、reference必须在初始化时完成绑定,一旦完成绑定不可更改绑定。
A reference is not an object. Instead, a reference is just another name for an
already existing object.
3、当对renference进行赋值时,实际上是对reference绑定的对象进行赋值;当访问reference的值时,实际上是对reference绑定的对象的值进行访问。
4、由于reference不是对象,不能用renference值来定义reference
#include<iostream>
#include<typeinfo.h>
using namespace std;
int main(){
int value = 1024;
int value2 =2048;
int &rvalue =value;
int value3 = rvalue;
value =2049;
rvalue = 2050;
cout<<&value<<"_"<<&value2<<"_"<<&rvalue<<endl;
cout<<value<<"_"<<rvalue<<endl;
cout<<value3<<"_"<<&value3<<endl;
cout<<typeid(&rvalue).name()<<endl;
cout<<typeid(value).name()<<endl;
cout<<typeid(1002).name()<<endl;
return 0;
}
Pointer
1、Pointer用于间接访问其他对象,持有另一个对象的地址
#include<iostream>
using namespace std;
int main(){
//指针本身是一个对象
int ival = 42;
//指针持有另一个对象的地址
int *p = &ival;
cout<<*p<<"_"<<p<<endl;
}
2、Pointer本身是一个对象
3、Pointer可被赋值和复制,必须为同类型的Pointer
#include<iostream>
using namespace std;
int main(){
//指针本身是一个对象
int ival = 42;
//指针持有另一个对象的地址
int *p = &ival;
*p =0;
cout<<*p<<"_"<<p<<"_"<<&ival<<"_"<<ival<<endl;
}
当向*p赋值时,其实是向*p指向的对象ival赋值
4、在其生命周期内,Pointer可指向不同对象
5、Pointer在初始化时,可不用被赋值;但不赋值时,存在一定风险;若在创建Pointer时不知其初始值,可初始化其为0,即不指向任何对象。