Compound Types——Reference

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,即不指向任何对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值