c++对c的扩展----引用类型
变量是一个内存的别名,程序通过变量名使用内存空间,当然一个内存空间可以起多个别名么?
答案:可以,这就是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的扩展----引用类型的更多相关文章
- C#指南,重温基础,展望远方!(3)类型和变量
C# 有两种类型:值类型和引用类型. 值类型的变量直接包含数据,而引用类型的变量则存储对数据(称为“对象”)的引用.对于引用类型,两个变量可以引用同一对象:因此,对一个变量执行的运算可能会影响另一个变 ...
- C# 泛型(4) 持续更新
泛型可以创建独立于被包含类型的类和方法. C++模板与泛型相似. 泛型优点性能 System.Collections 和 System.Collections.Generic 名称空间泛型和非泛型集合 ...
- 引用类型 (Reference Type Matters)、扩展与派发方式
引用类型 (Reference Type Matters) 引用的类型决定了派发的方式. 这很显而易见, 但也是决定性的差异. 一个比较常见的疑惑, 发生在一个协议拓展和类型拓展同时实现了同一个函数的 ...
- 抛弃 .NET 经典错误:object null reference , 使用安全扩展方法? 希望对大家有帮助---Bitter.Frame 引用类型的安全转换
还是一样,我不喜欢长篇大论,除非关乎我设计思想领域的文章.大家过来看,都是想节省时间,能用白话表达的内容,绝不长篇大论.能直接上核心代码的,绝不上混淆代码. 长期从事 .NET 工作的人都知道..NE ...
- 练习2 练习目标-使用引用类型的成员变量:在本练习中,将扩展银行项目,添加一个(客户类)Customer类。Customer类将包含一个Account对象。
package banking; public class Customer { private String firstName; private String lastName; private ...
- 【开源】OSharp框架解说系列(3):扩展方法
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- 利用jQuery对插件进行扩展时,方法$.extend()、$.fn.extend()区别与联系
利用JQ开发插件的方法: 1.jQuery.extend(); 2.jQuery.fn.extend(); 3.通过$.widget()应用jQuery UI的部件工厂方式创建. 由于第三种方式通 ...
- C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
1.C#类和接口的区别接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽 ...
- thinkphp 行为扩展以及插件机制介绍
首先行为扩展这个概念是TP架构的核心组成之一,关于行为的解释我就粗略的概括一下吧:TP在从接受到HTTP请求到最终将视图输出,期间经历的很多步骤,这些步骤大家可以在http://document.th ...
随机推荐
- 了解 DML、DDL、DCL
一.DML DML(Data Manipulation Language)数据操纵语言: 最经常用到的 SELECT.UPDATE.INSERT.DELETE. 主要用来对数据库的数据进行一些操作 S ...
- CentOS7 服务器连接超时自动断开问题解决
背景 现在的客户们都开始使用云服务器了,还要通过堡垒机才给访问权限,这种方式访问方式以前都是银行的"专利",不过也间接说明其他行业的信息化也越来越普及了.今天主要是因为分配给我的这 ...
- (十三)使用handler实现登录验证
一.Handel概念 J2EE Web 服务中的Handler技术特点非常像Servlet技术中的Filter.我们知道,在Servlet中,当一个HTTP到达服务端时,往往要经过多个Filter对请 ...
- C++万能头文件<bits/stdc++.h>的内容与优缺点
最近发现了一个C++的头文件bits/stdc++.h,听说这是一个几乎包含了所有C++库函数的头文件,就想更深入的了解一下,下面是头文件内容 // C++ includes used for pre ...
- 使用IP代理初体验
在很多时候我们需要用到IP代理,比如爬虫.投票等 封IP是一种很常用的办法,所谓道高一尺.魔高一丈,IP代理应运而生 最简单的一段代码 static void Main(string[] args) ...
- C#操作DOS命令,并获取处理返回值
// /*---------------- // // 文件名:Method // // 文件功能描述: // // 使用 ADB 来进行安卓设备与PC端之间的文件交互,具体adb命令操作请百度 ...
- 关于安装Chrome插件elasticsearch-head
因为Chrome商店不能使用,安装插件很麻烦. 可以在github上下载elasticsearch-Head插件:https://github.com/mobz/elasticsearch-head/ ...
- 笔记: ASP.NET Core视图组件
视图组件 asp.net core mvc 提供了部分视图的新替代品:视图组件. 视图组件与分布视图的主要区别在于视图组件与控制器不相关.可使用在独立于单个控制器的场景,如:菜单导航.侧边栏.分页栏等 ...
- DOM树节点关系
DOM是JS中专门操作HTML页面内容的 他的三种基本使用方法是: 1. document.getElementById(''): ——>选取html页面中带有Id的属性名: 2.docum ...
- 部署在SAP Cloud Platform CloudFoundry环境的应用如何消费SAP Leonardo机器学习API
Jerry的前一篇文章 如何在Web应用里消费SAP Leonardo的机器学习API 里介绍的例子是Neo测试环境的Web应用消费sandbox版本的机器学习API,url如下: https://s ...