博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++中引用的本质
阅读量:4212 次
发布时间:2019-05-26

本文共 1443 字,大约阅读时间需要 4 分钟。

c++中引用就是一个常指针,其也占用内存空间。

1)引用在C++中的内部实现是一个常指针

Type& name 《-》Type* const name

2)C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。

3)从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。这是C++为了实用性而做出的细节隐藏

 

具体点:如下:

1)引用在实现上,只不过是把:间接赋值成立的三个条件的后两步和二为一

 

(简介赋值的三个条件: 1定义两个变量 (一个实参一个形参) 2建立关联 实参取地址传给形参  3 *p形参去间接的修改实参的值)

//当实参传给形参引用的时候,只不过是c++编译器帮我们程序员手工取了一个实参地址,传给了形参引用(常量指针)

如下图所示,c++编译器会把左边的代码翻译成右边的。

2)当我们使用引用语法的时,我们不去关心编译器引用是怎么做的

    当我们分析奇怪的语法现象的时,我们才去考虑c++编译器是怎么做的。

 

详细点就是看下面的代码:

#include 
using namespace std;//1 第一点 单独定义的引用时,必须初始化;说明很像一个常量void main1(){ // const int c1 = 10; int a = 10; int& b = a; //b很想一个常量 printf("&a:%d \n", &a); printf("&b:%d \n", &b); //===> a 和 b就是同一块内存空间的门牌号,a和b的地址是一样的,说明引用b就是a的别名 cout << "hello..." << endl; system("pause"); return;}//2 普通引用有自己的空间吗? 有 struct Teacher{ char name[64]; //64 int age; //4 int& a; //4 0 //很像指针 所占的内存空间大小 int& b; //4 0 };//3 引用的本质void modifyA(int& a1){ a1 = 100;}void modifyA2(int* const a1){ *a1 = 200; //*实参的地址 ,去间接的修改实参的值 }void main(){ int a = 10; //1 modifyA(a); //指向这个函数调用的时候,我们程序员不需要取a的地址 printf("a:%d \n", a); //输出100 // a = 10; modifyA2(&a); //如果是指针 需要我们程序员手工的取实参的地址 printf("a:%d \n", a); //输出200 printf("sizeof(Teacher):%d \n", sizeof(Teacher)); //输出76,说明普通引用有自己的内存空间 system("pause");}void modifyA3(int* p){ *p = 200; //*p 3*p形参去间接修改实参的值}//间接赋值void main11(){ int a = 10; int* p = NULL; //间接赋值成立的三个条件 1 定义两个变量 p = &a; *p = 100; { *p = 200; } modifyA3(&a); //2 建立关联}// 123 写在一块// 12 3//1 23

 

转载地址:http://rqzmi.baihongyu.com/

你可能感兴趣的文章
StampedLock源码解析
查看>>
ReentrantReadWriteLock源码解析
查看>>
springboot源码解析(四)
查看>>
CompletionService实践
查看>>
YApi在Window上离线安装笔记
查看>>
Mysql学习笔记(十三)查看mysql日志
查看>>
JVM垃圾回收相关知识笔记
查看>>
Curator学习笔记(一)- 读写锁
查看>>
第一次炒股小记
查看>>
《redis in action》ZSet相关命令
查看>>
《redis in action》redis发布订阅
查看>>
《redis in action》sort排序命令
查看>>
《redis in action》redis事务
查看>>
《redis in action》key的自动过期
查看>>
《redis in action》redis持久化简介
查看>>
《redis in action》redis快照
查看>>
《redis in action》Redis aof持久化
查看>>
《redis in action》开启aof日志
查看>>
CS224N研究热点2_Linear Algebraic Structure of Word Senses, with Applications to Polysemy(对于一词多义的向量表示研究)
查看>>
Java编程中,什么数据类型适合用来表示价格?
查看>>