(面向对象)15

本文从内存角度探讨了值、指针和引用的区别。指针是地址的一种形式,可以改变指向,而引用则在创建时必须初始化且不可改变,其在底层实现实质为指针,但提供了更安全的使用方式。引用在参数传递中常被使用,因其速度快。文章还介绍了如何输出指针和引用的地址及内容,并强调了它们在内存占用上的差异。
摘要由CSDN通过智能技术生成

P15:

从内存的角度,探讨如下这三个东西

值 value本身

指针 pointer

引用 reference

指针就是一种地址的形式,地址就是一种指针的形式----------->地址、指针互通

指针-------->指向

引用——-->代表

//*靠近int可以,*靠近p也可以
int* p = &x;

int *p = &x;

int* p = &x--------------------->p是一个变量,类型是pointer to int

int& r = x;

int& r = x----------------------->r是一个变量,类型是reference to int,代表

对于引用-------------------->(刻意制造出来的假象)r代表谁,那么r的大小取决于代表的谁,r的地址与代表的地址相同

//刻意制造出来的假象,大小相同,地址相同
//实际上地址不相同
//实际上引用在底层实现是指针
sizeof(r)  == sizeof(x);

&r         ==  &x

因为x是0,所以r是0

r里面有一根指针指向x

引用一定要有初值,即r代表了x,从此之后r不可以代表其他的

指针可以变化,这个时刻指向a,下个时刻指向b,但是reference不可以,只可以代表初值

x、p、r都是变量,共占用了3块内存

 

对于指针p,输出p的地址------>cout<<p;

                    输出p所指东西的内容--------->cout<<*p;

cout<<p;                   //输出地址


cout<<*p;                  //输出p所指东西的内容

对于引用r,输出r的地址------------------------->cout<<&r;

                    输出r代表东西的内容------------>cout<<r;

cout<<&r;                   //输出地址


cout<<r;                  //输出r代表东西的内容

 

reference就是一个漂亮的指针

 

reference是用途----------->多数用在参数的传递上

声明采用了3中传递方式------------>pass by pointer        pobj->XXX()

                                                      pass by value           obj.XXX()

                                                      pass by reference    obj.XXX()

定义变量-------------->Cls obj;

pointer           func1(&obj)<------指针与地址互通

value             func2(obj)

reference       func3(obj)<--------传4个字节,速度快

signature不包含返回类型,但是包含参数列()后面的const

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值