• C++中有没有引用数组这个概念?

试分析下面这段代码会不会出现错误。

struct St
{int& x;int& y;int& z;
};int a = 1;int main()
{int b = 2;int* pc = new int(3);St st = {a, b, *pc};         int& array[] = {a, b, *pc}; delete pc;
}

结构体变量中有三个int&型成员,由于引用在定义时必须初始化,所以结构体变量就被a,b,pc分别初始化了,成为了他们的别名。所以St st = {a, b, *pc}这一句并没有错误。

打印出结构体中三个引用的地址:

&st.x :010E2000

&st.y :011EFE0C

&st.z :0175B5C

然后我们再来看看这一句:int& array[] = {a, b, *pc}。这一句表示定义一个引用数组,也分别由a、b、*pc初始化。但是编译器却报错了。原因其实是数组元素在内存中是连续的,不能将三个地址不连续的变量初始化给int&型数组。

所以得出结论:C++中没有引用数组这个概念!

  • 引用占内存吗?

经过上面的问题,我们发现引用没有独立空间,和其引用实体共用同一块空间,但真的是这样吗?

把上面的代码进行修改:

struct St {int start;int& x;int& y;int& z;int end;
};int a = 1;int main()
{int b = 2;int *pc = new int(3);St st = { 10, a, b, *pc, 20};cout << &st.start << endl;cout << &st.x << endl;cout << &st.y << endl;cout << &st.z << endl;cout << &st.end << endl;delete pc;return 0;
}

在结构体开始和结束时分别加了一个变量。

打印出start和end变量的地址:

&st.start:0093F718

&st.x :010E2000

&st.y :011EFE0C

&st.z :0175B5C

&st.end:0093F728

我们发现,x、y、z依旧是引用的实体的地址,而start和end却是连续存放的,中间相隔了12个字节(减去start的4字节)。

所以得出结论:引用在底层实现上实际是有空间的,只不过编译器不让我们直接获取到实现引用的那个指针常量。

C++中引用的一些问题相关推荐

  1. Android Studio 在项目中引用第三方jar包

    在Android Studio项目中引用第三方jar包的方法: 步骤: 1.在build.gradle文件中添加如下代码: 备注:要添加在Android作用域下 sourceSets {main {j ...

  2. Angular7中引用外部JS文件

    Angular7中引用外部JS文件,步骤如下: 1. 将引入的js文件放到项目的src/assets下 2. 在angular.json文件中找到scripts项并配置js文件的相对路径 3. 在sr ...

  3. IOS 编程中引用第三方的方类库的方法及常见问题

    方法一:直接复制全部源文件到项目中 这样的方法就是把第三方类库的全部源文件复制到项目中.直接把全部.h和.m文件拖到XCode项目中就可以. 注意: 1. 假设第三方类库引用了一些系统自带类库.那么在 ...

  4. postman简单教程,如何在请求中引用上次请求返回的值

    做接口测试,一定会遇到这种情况,需要拿上次请求的值在本次请求中使用,比如,我们去测试一个东西,要去登录才能做其他的操作,需要拿到登录返回数据中的某些字段,比如,token啊等... 如果发一次请求,就 ...

  5. iOS中引用计数内存管理机制分析

    在 iOS 中引用计数是内存的管理方式,虽然在 iOS5 版本中,已经支持了自动引用计数管理模式,但理解它的运行方式有助于我们了解程序的运行原理,有助于 debug 程序. 操作系统的内存管理分成堆和 ...

  6. matlab messagebox函数,[MATLAB]在C#中引用MATLAB函数

    环境:VS2017+MATLAB R2017a ①打开上次我们生成的BPClass.cs文件(目录:~//bin/BP/for_testing),得在C#程序中引用生成的dll文件(目录:~//bin ...

  7. 在html中引用css样式表,怎么引用css样式?

    怎么引用css样式?下面本篇文章给大家介绍一下在HTML中引用css样式的几种方式.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 1.使用行内样式表 语法:在标签内部写入一个sty ...

  8. IDEA中引用不到HttpServlet的解决方案

    IDEA中引用不到HttpServlet的解决方案 参考文章: (1)IDEA中引用不到HttpServlet的解决方案 (2)https://www.cnblogs.com/qcq0703/p/11 ...

  9. 查询qt中的数据_EXCEL在多表中查询数据(函数中引用工作表的办法)

    与EXCEL打交道也好几年了,你是不是还停留在经常性简单而重复的工作呢?每月忙的时候天天加班,空闲的时候盯着手机刷刷刷,,既然如此,轻松的时候就应该琢磨下怎样提升效率,比如规范好自己的数据源,设计一套 ...

  10. Android中自定义View的研究 -- 在XML中引用自定义View

    如果在一直使用SetContentView(new HellwView(this)觉得总是少了一点东西,少了什么了,失去了Android中使用XML定义组件的便携性,这种感觉让人很不爽,呵呵,在这节里 ...

最新文章

  1. nodejs中使用worker_threads来创建新的线程
  2. C++ 11 深度学习(六)智能指针综述
  3. Vue封装下拉框组件时,为document绑定原生事件addEventlistener(click“),切换页面之后事件还未被摧毁...
  4. ubuntu命令模式中文乱码
  5. python中reshape_Numpy之reshape()使用详解
  6. OJ1046: 奇数的乘积(C语言)
  7. opencv 轮廓放大_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...
  8. ALGO-84 矩阵乘法
  9. java 局部变量垃圾回收_java局部变量对垃圾回收的影响
  10. DELPHI中完成端口(IOCP)的简单分析(1)
  11. uwp - ContentDialog - 自定义仿iphone提示框,提示框美化
  12. java 配置dbcp_java – 使用DBCP进行Tomcat配置
  13. 网络编程+并发编程总结
  14. Minecraft Mod 开发:2-Hello, Minecraft Mod World!
  15. 将文件转换成json
  16. 2.2 DP: Value Iteration Gambler‘s Problem
  17. Linux:CPU频率调节模式以及降频方法简介
  18. PCB板的线宽、铜厚度,与通过的电流对应的关系,一文看懂!
  19. 微信新版本(6.6.7)功能设计背后的逻辑及需求
  20. 关于cocos creator 2.0的废除cc.p接口Sorry, cc.p is deprecated. Please use cc.v2 instead

热门文章

  1. 银河麒麟更换源及离线下载deb
  2. vs下 string输出中文 打印中文
  3. python怎么导入txt数据库_Python导入txt数据到mysql的方法
  4. linux分区dh满了,python 在linux下能过top,和dh命令获得cpu,内存,以及硬盘信息 - Sprite...
  5. idrmyimage 技巧_王者荣耀公孙离2000场-心得技巧,教你究极进阶!
  6. linux防火墙文件找不到,防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件
  7. 软件开发工程师证书有用吗_bim工程师证书有用吗 含金量怎么样?
  8. Space-Filling Designs
  9. 禁止php 报错怎么做,php – 禁用Laravel错误处理程序
  10. matlab中inband函数,pjsip 实现 DTMF 数据获取,并解析按键信息