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 ...
随机推荐
- activate-power-mode安装与设置
Window-->activate-power-mode-->去掉combo/shake,其他三个全勾上,现在用起来就很爽了,赶紧体验吧.
- windows下图形学视觉基本库安装不完全指南
安装各种库东奔西走...... GLUT(英文全写:OpenGL Utility Toolkit)是一个处理OpenGL程式的工具库,负责处理和底层操作系统的呼叫以及I/O,并包括了以下常见的功能: ...
- SQL-锁-事物级别
一.锁 锁是一种安全机制,控制并发操作,防止用户读取其他用户正在更改的数据,或者多用户同时修改一个数据,从而保证事物的完整性和数据库的一致性.SQLserver 会自动强制执行锁,但是用户可以通过对锁 ...
- MapReduce的shuffle过程详解
[学习笔记] 结果分析:shuffle的英文是洗牌,混洗的意思,洗牌就是越乱越好的意思.当在集群的情况下是这样的,假如有三个map节点和三个reduce节点,一号reduce节点的数据会来自于三个ma ...
- HTML札记
HTML 指的是 超文本标记语言 (Hyper Text Markup Language) 文档后缀名: 当您保存 HTML 文件时,既可以使用 .htm 也可以使用 .html 扩展名.两者没有区别 ...
- Erlang:[笔记二,构建工具rebar之发布应用]
概述 通过rebar可以发布rebar构建的erlang项目,生成可执行的二进制脚本文件,大大降低了执行应用的复杂度.该笔记Erlang环境为Erlang/OTP 19 ,以下适用于Eralng/OT ...
- LC 98. Validate Binary Search Tree
题目描述 Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defin ...
- PHP和Memcached - Memcached的安装
1.现有扩展对比 memcache memcached 实现方式 原生 局域libmemcached的类库,性能高 编程方式 面向过程.对象 面向对象 CAS命令 NO YES php7 NO Y ...
- [Tensorflow]激励函数tf.nn.relu样例
代码: import tensorflow as tf import numpy as np ### 定义添加神经网络层函数 START ### def add_layer(inputs,in_siz ...
- (八)二进制文件在webservice中的处理(以byte[]字节数组方式)
一.介绍 二进制文件在webservice中的处理. A:通过byte[]字节数组的方式来传递.比较适合小文件,字节数组不能太大的情况.(本章所用) B:通过DataHander的方式来进行传递. 1 ...