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 ...
随机推荐
- VC++单文档程序固定菜单栏和工具栏
MainFrm.cpp框架类下,找到OnCreate方法 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY); m_wndToolBar.EnableDocking( ...
- 通过jquery触发select自身的change事件
###通过jquery触发select自身的change事件 1.通过js来去触发select的change事件 代码如下:包含了html部分和js部分 //html部分 <select cla ...
- 20190705-Python数据驱动之DDT
DDT ddt 是第三方模块,需安装, pip install ddt DDT包含的装饰器 包含一个类装饰器@ddt和两个方法装饰器@data和@file_data 通常情况下,@data中的数据按照 ...
- 少儿编程Scratch第四讲:射击游戏的制作,克隆的奥秘
上周的宇宙大战射击游戏中,我们只完成了宇宙飞船发射子弹的部分.还未制作敌对方.这周制作了敌方-飞龙,飞龙随机在屏幕上方出现,如果被子弹打中,则得分,飞龙和子弹都消失. 敌方:飞龙:计分. 目的 目的: ...
- Mysql分表和分区的区别、分库和分表区别
一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法. 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个 ...
- jacascript Math (算数)对象
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 实际应用中用的比较多的有:round(); random(); floor(); ceil(); 其次还有 ...
- (三)springmvc之注解的基本使用
一.@Controller @Controller 标记一个类是Controller 二.RequestMapping 地址映射 2.1 Value的操作. 注解在类上面 (父) ...
- element的Dialog组件踩坑
在一个组件页面中需要有一个弹窗,为了代码简洁我把弹窗封装成一个组件方便重复调用 描述大致是一个父组件,里面有一个按钮还有一个子组件(弹窗),点击按钮让弹窗出来,弹窗自带的有关闭功能,点击关闭以后再点击 ...
- Golang内存管理
Golang 内存管理 原文链接[http://legendtkl.com/2017/04/02/golang-alloc/] Golang 的内存管理基于 tcmalloc,可以说起点挺高的.但是 ...
- iOS7 新后台及下载SDK介绍
在iOS7以前的系统中,App默认是不能后台运行的,如果要后台运行,可以采用以下两类方法: (1)使用beginBackgroundTaskWithExpirationHandler函数,向系统申请一 ...