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 ...
随机推荐
- S3. Android 消息推送
[概要] 消息推送
- HikariCP连接池及其在springboot中的配置
主要配置如下: 配置项 描述 构造器默认值 默认配置validate之后的值 validate重置 autoCommit 自动提交从池中返回的连接 true true - connectionTime ...
- Oracle的varchar2如何比较大小
首先要说的是Oracle中字符类型的比较都是基于ASCII码表来实现的,我就简单做个总结. Oracle中varchar2类型的字符串使用的是非填充空格的标准来进行比较的(表格中右边的那列,注意空格的 ...
- Python enumerate()内置函数
Python enumerate()内置函数 文章参考 描述 enumerate()函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合成一个索引序列,同时列出数据和数据下标,一般用于for循环 ...
- 数据库设计_ERMaster安装使用_PowerDesigner数据设计工具
数据库设计 1. 说在前面 项目开发的流程包括哪些环节 需求调研[需求调研报告]-- 公司决策层 (1) 根据市场公司需求分析公司是否需要开发软件来辅助日常工作 (2) 公司高层市场考察,市场分析,决 ...
- 电子口岸 打开“退税联打印”时,PDF界面无法显示
电子口岸 打开“退税联打印”时,PDF界面无法显示 咨询0571-95198 : IE要在8-10间,系统 要Win7 32B ---------------------参考------------- ...
- (二十一)JSP基础
定义 JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写html,但它相 ...
- 加密算法 MD5 和 SHA 的 JAVA 实现
首先先简单的介绍一下MD5 和 SHA 算法 然后看一下在 java.security.MessageDigest (信息摘要包下) 如何分别实现 md5 加密 和 sha 加密 最后在看一下 ...
- Tomcat服务器的数字证书 HTTPS 连接!
SUN公司提供了制作证书的工具keytool, 在JDK 1.4以后的版本中都包含了这一工具,它的位置为\bin\keytool.exe 注意要使用一下 cmd命令,请确认jdk环境变量可以使用,可以 ...
- ElasticSearch创建动态索引
ElasticSearch创建动态索引 需求:某实例需要按照月份来维护,所以之前的“写死”索引的方式当然不行了.通过百度和看SpringDataElasticSearch官方文档,最后解决了这个问题. ...