C++重要知识清单:引用的一些易忘点

引用的本质

   我们都知道引用就是其他变量的别名,比指针更加的可读和实用。那么引用的本质到底是什么呢?

编译器到底做了什么?

引用在单独定义时必须要声明,这一点很像常量;引用占的内存空间和指针一样;所以不难推测引用的本质其实就是常量指针

Type& name 等价于 Type* const name

这也体现了C++在设计时为了实用性而做出的细节隐藏,让使用者只需把引用当成是变量的一个别名,具体的过程由编译器内部实现。

指针的引用

 在c语言中获取被调用函数中一块内存中的资源要用二级指针,如下:

struct Car{
    int id;
    string name;
}
//形参为二级指针
int getCar(Car ** p){
    Car* tmp=NULL;
    tmp=(Car*)malloc(sizeof(Car));
    tmp->id=1;
    tmp->name="abc";
    // *p为目标内存块的首地址
    *p=tmp;
}

void main(){
    Car* ptr=NULL:
    //传入的是地址
    getCar(&ptr);
}

这样看起来很繁琐,而C++中使用指针的引用可以让可读性更强。

struct Car{
    int id;
    string name;
}
//形参为引用类型(指针的引用)
int getCar(Car* &p){
    p=(Car *)malloc(sizeof(Teacher)); 
    if(p == NULL){
       return -1;
    }
    p->age=1;
}
void main(){
    Car* ptr=NULL:
    //传入的是地址
    getCar(&ptr);
}
 

常引用

常引用的作用是让变量 引用只读属性。常引用有以下两种情况

(1)用变量初始化

int x=1;
//用变量初始化常引用,这样就不能通过y去修改x
const int &y=x;

(2)用字面量初始化

//编译器会把x放到符号表中
const int x=1;
//如果用普通的引用,下面这句话编译会报错,因为字面量1是没有内存的地址的
int & y1=1;
//加上cosnt 就可以成功的编译;编译器会直接分配内存空间来存储1,然后让y2指向这个内存空间
const int & y2=1;

 

 

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值