前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转腾讯云】C++学习笔记-引用

【玩转腾讯云】C++学习笔记-引用

原创
作者头像
买唯送忧
修改2021-05-04 14:21:53
1.2K0
修改2021-05-04 14:21:53
举报
文章被收录于专栏:虚拟技术学习

一、引用

引用可以说是c++一大特色,好用但是好多人都搞不明白它,现在我尝试着用我这几天跟着侯捷老师学来的写一下我的理解。

int a = 4

int& s = a

int* p = &a(指向第一行的a)

int a1 = 5;

int& s2 = s;

memory

代码语言:javascript
复制
int a = 4; //可以得到内存里开辟了一个空间存放a(4个字节)
int* p = &a; //取a的地址赋值给p,从而p是一个指向a的一个地址(对于32位pc来说也是四字节)
int& s = a; //p是a的引用,也可以说是p代表a并且之后p只能代表a,不会改变,从而p, a 都是4
//(从memory看,好像引用并没有指向a,实际上在引用内部是存在指向a的指针的).

int a1 = 5;
s = a1; //s是不能重新代表其他物体的,因而,s还是代表a,s变成了5因此a也变成了5。(函数传参常用)
int& s2 = s; //现在是s2代表s,s代表a,也可以说是s2代表a;

下面给大家一个例子(摘抄自侯捷老师的视频)

代码语言:javascript
复制
typedef struct Stag{int a, b, c, d;} S;

int main()
{
    double x = 0;
    double* p = &x;
    double& s = x;
    cout << sizeof(x) << endl;   //输出8,double是八个字节
    cout << sizeof(p) << endl;   //输出4,是个地址
    cout << sizeof(s) << endl;   //输出8,因为引用是s代表x
    cout << p << endl;   //0065FDFC
    cout << *p << endl;  //0
    cout << x << endl;   //0
    cout << s << endl;   //0
    cout << &s << endl;  //0065FDFC
    cout << &x << endl;  //0065FDFC
    
    S s;
    S& rs = s;
    cout << sizeof(s) << endl; //16个字节,4个int,4*4
    cout << sizeof(rs) << endl; //16;
    cout << &s << endl;   //0065FDE8
    cout << &rs << endl;  //0065FDE8
}

//可以看到,我们看到的object与它的引用大小一样,地址也一样,然后通过上面的memory发现,并不是这样;这是因为;
//object与它的引用大小一样,地址也一样是假象,,我的理解:假象的意思是,,在内存里面不一样,,
//但是输出的时候经编译器的处理和内部存在,就是一样的,,,

//这个输出也说明了一件事引用确实代表着原对象,,,地址一样,值也一样不就是代表吗。。

日常写函数,,建议使用引用传参:

代码语言:javascript
复制
void fun1(Cls* pobj){return pobj->xxxx();}
void fun2(Cls& pobj){return pobj.xxxx();}
void fun3(Cls pobj){return pobj.xxxx();}//被调用端后两种写法一样,更好理解,用引用也更快

Cls obj;
fun1(&obj);
fun2(obj);
fun3(obj);//调用端后两种写法一样,更好理解,用引用也更快;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、引用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档