变量是一个内存的别名,程序通过变量名使用内存空间,当然一个内存空间可以起多个别名么?

答案:可以,这就是c++中引用的由来,引用就是给变量起别名

引用是c++的概念!!!况且声明引用的符号&十分像是取地址操作

#include<iostream>
#include<string>
using namespace std; void main()
{
string name = "徐晓冬";
string &name2 = name;//name2就是对name的引用
name2 = "陈培昌";
cout << "我是" << name << endl;
cout << "哟~原来是老弟你" << endl;
system("pause");
}

当然引用在定义的时候必须要初始化

用途:交换数值

#include<iostream>
#include<string>
using namespace std; void swapnum(int a,int b)
{
//int a = 2,
int c = ;
//int b = 3;
c = a;
a = b;
b = c;
} void canswap(int &a,int &b)
{
int c = a;
a = b;
b = c;
} void needleswap(int *a, int*b)
{
int c = *a;
*a = *b;
*b = c;
} void main()
{
int a = ;
int b = ;
//needleswap(&a, &b);
canswap(a,b);
cout << "a:" << a << "b:" << b << endl;
system("pause");
}

输出结果:

  • 引用的本质:其实和指针有异曲同工之妙
#include"iostream"
#include<string>
using namespace std;
struct mycoach
{
string name;
string &hiscoachname;
int &age;
}; void main()
{ string coach = "徐晓冬";
printf("struct实例地址是%d\n", sizeof(coach));
printf("struct实例地址是%d\n", sizeof(mycoach));
system("pause");
}

  • 引用作为函数的返回值
#include"iostream"
#include<string>
using namespace std; int& getnum()
{
int a = ; return a;
} void main()
{ int &b = getnum();//返回内存空间,命名为b,函数运行完空间被释放掉,一些版本的编译器可能导致乱码,栈变量不能作为初始化返回值,可能带来问题!而静态变量和全局变量无此问题
int c = getnum();//返回变量本身,副本
printf("b的值是%d\n",b);
printf("c的值是%d\n",c);
system("pause");
}

输出结果:基于vs2013

  • 左值----函数在操作的左边---即给函数赋值
#include"iostream"
#include<string>
using namespace std; int& getnum()
{
static int a = ;
a++;
return a;
} void main()
{ getnum() = ;//这样一来,a的值由10变成了60
int &c = getnum();
printf("a的值是%d\n", c);
getnum() = ;
int &b=getnum();
printf("a的值是%d\n",b);
system("pause");
}

输出结果:

c++对c的扩展----引用类型的更多相关文章

  1. C#指南,重温基础,展望远方!(3)类型和变量

    C# 有两种类型:值类型和引用类型. 值类型的变量直接包含数据,而引用类型的变量则存储对数据(称为“对象”)的引用.对于引用类型,两个变量可以引用同一对象:因此,对一个变量执行的运算可能会影响另一个变 ...

  2. C# 泛型(4) 持续更新

    泛型可以创建独立于被包含类型的类和方法. C++模板与泛型相似. 泛型优点性能 System.Collections 和 System.Collections.Generic 名称空间泛型和非泛型集合 ...

  3. 引用类型 (Reference Type Matters)、扩展与派发方式

    引用类型 (Reference Type Matters) 引用的类型决定了派发的方式. 这很显而易见, 但也是决定性的差异. 一个比较常见的疑惑, 发生在一个协议拓展和类型拓展同时实现了同一个函数的 ...

  4. 抛弃 .NET 经典错误:object null reference , 使用安全扩展方法? 希望对大家有帮助---Bitter.Frame 引用类型的安全转换

    还是一样,我不喜欢长篇大论,除非关乎我设计思想领域的文章.大家过来看,都是想节省时间,能用白话表达的内容,绝不长篇大论.能直接上核心代码的,绝不上混淆代码. 长期从事 .NET 工作的人都知道..NE ...

  5. 练习2 练习目标-使用引用类型的成员变量:在本练习中,将扩展银行项目,添加一个(客户类)Customer类。Customer类将包含一个Account对象。

    package banking; public class Customer { private String firstName; private String lastName; private ...

  6. 【开源】OSharp框架解说系列(3):扩展方法

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  7. 利用jQuery对插件进行扩展时,方法$.extend()、$.fn.extend()区别与联系

      利用JQ开发插件的方法: 1.jQuery.extend(); 2.jQuery.fn.extend(); 3.通过$.widget()应用jQuery UI的部件工厂方式创建. 由于第三种方式通 ...

  8. C#类和接口、虚方法和抽象方法及值类型和引用类型的区别

    1.C#类和接口的区别接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽 ...

  9. thinkphp 行为扩展以及插件机制介绍

    首先行为扩展这个概念是TP架构的核心组成之一,关于行为的解释我就粗略的概括一下吧:TP在从接受到HTTP请求到最终将视图输出,期间经历的很多步骤,这些步骤大家可以在http://document.th ...

随机推荐

  1. C#中使用HttpClient来Post数据的内容HttpContent的各种格式

    平时使用各种网络传输的时候基本上是以Json格式进行的, 所以对其他几种格式也是一知半解, 今天静下心对其好好梳理一番. 首先我借鉴了一篇文章(https://segmentfault.com/a/1 ...

  2. 2019php面试大全

    一 .PHP基础部分 1.PHP语言的一大优势是跨平台,什么是跨平台? PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows.Linux等)上配 ...

  3. Python开发【杂货铺】:作用域的痛点

    1.块级作用域 想想此时运行下面的程序会有输出吗?执行会成功吗? #块级作用域 if 1 == 1: name = "lzl" print(name) for i in range ...

  4. springboot 集成fastDfs

    pom.xml 引入依赖 <dependency> <groupId>com.github.tobato</groupId> <artifactId>f ...

  5. sysbench安装和测试

    1.首先安装依赖 yum install mariadb-devel yum install automake libtool –y 2.下载安装包 wget https://github.com/a ...

  6. MySQL 子查询(四)子查询的优化、将子查询重写为连接

    MySQL 5.7 ref ——13.2.10.10优化子查询 十.子查询的优化 开发正在进行中,因此从长远来看,没有什么优化建议是可靠的.以下列表提供了一些您可能想要使用的有趣技巧.See also ...

  7. 怎样解决Chrome浏览器因为禁止音频自动播放所造成的视频无法自动播放且报错: Uncaught (in promise) DOMException的问题

    这个问题是谷歌基于用户体验方面的考虑, 对页面加载时自动播放的音频作了限制, 试想一下, 如果你打开某个页面就立刻自动播放某种不可描述的声音, 那体验想必是十分酸爽. 尽管这个设定是针对音频的, 但实 ...

  8. (八)装配Bean(2)

    二.在Java类中进行显式的装配 显式配置有两种: 1. 一种是在java(本文讲解)   2. 另一种是xml配置文件(第一章有讲) 案例一: 使用java显式装配+@autowired自动装配的方 ...

  9. Visual Studio 2017修改编码UTF-8

    转载自:https://blog.csdn.net/qq_36848370/article/details/82597157 VS 2017隐藏了高级保存功能,导致没办法直接去设置代码编码 UTF-8 ...

  10. 五、小程序wx:key中的关键字*this

    “保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如果是对象则不可以 data:{ array:[1,2,3,4,5], ob ...