6.2、引用类型的本质

#include<iostream>
using namespace std;
//1.单独的引用,必须初始化,说明很像一个常量。
int maine(){
    int a=10;
    int &b=a;//1、引用变量也相当于一个门牌号。一个内存空间有多个门牌号
    cout<<&a<<endl; //a 和 b 是同一块内存空间的门牌号
    cout<<&b<<endl; //它们的值,相等的指向同一个内存空间。
    system("pause");
}
/*
 *2、普通引用类型占用的内存空间。 4个字节
 */
struct teacher
{
    int age;
    char name[20];
    int &a;  //引用类型是占用内存四个字节
};


int maing(){
    cout<<"sizeof(teacher)"<<sizeof(teacher)<<endl;
}
/**
 * @brief main
 * @return
 * 引用的本质:1.它是一个指针常量,相当于   int  & a 相当于  int  *  const a;
 *
 * 2、因为在c++在编译时,引用的内部实现是指针常量,所以指针所占用的内存大小和指针占用的内存大小相同。
 *
 *3、在使用者的角度。引用会让人误认为一个别名,不会占用内存空间。这个是c++为了实用性,做的细节隐藏。
 *
 *
 */

void  p(int & a){  //相当于后面的函数、
   a=6;
}

void  p2(int * const a){
    *a=100;
}

int  mainh(){

    int a=10;
    p(a); //引用的调用,不需要函数的地址
    cout<<"a="<<a<<endl;
    p2(&a);//指针函数的调用,需要函数的地址
    cout<<"a="<<a<<endl;

}

void  p3(int * a){   
    *a=100;  //3、修改数据
}

/**
 * @brief main
 * @return
 * 1、间接赋值的是三个条件。
 * (1)、定义两个变量(一个实参,一个行参)
 * (2)、建立关联。(实参取地址传递给形参)
 * (3)、行参间接的去修改实参的值。
 * (4)、引用在实现上,只是把间接赋值的后面两个条件和二为一。
 */
int main(){

    int  a=10;

    int  *p=null; //1、定义两个变量

    p3(&a); //2、建立关联。

    p=&a; //2、建立关联。

    *p=20; //3、修改数据

}

引用的本质是:是把间接赋值的三个条件合二为一,给实参传给形参引用的时候,只不过c++编译器帮我们把形参取了一个地址,传递给形参的引用相当于(指针常量)   int   &   a  相当于   int   *  const  a;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值