C++入门经典-例5.16-输出引用
1:如不加特殊说明,一般认为引用指的都是左值引用。引用实际上是一种隐式指针,它为对象建立一个别名,通过操作符&来实现,引用的形式如下:
数据类型 & 表达式;
例如:
int a=10;
int & ia=a;
ia=2;
上面的程序定义了一个引用变量ia,它是变量名a的别名,对ia的操作与对a的操作完全一样。“ia=2”把2赋给a,“&ia”返回a的地址。执行“ia=2”和执行“a=2”等价。
使用引用的说明如下:
(1)一个C++引用被初始化后,无法使用它再去引用另一个对象,它不能被重新约束。
(2)引用变量只是其他对象的别名,对它的操作与原来对象的操作具有相同作用。
(3)指针变量与引用主要区别有两点:一是指针是一种数据类型,而引用不是一个数据类型,指针可以转换为它所指向变量的数据类型,以便使赋值运算符两边的类型相匹配;而使用引用时,系统要求引用和变量的数据类型必须相同,否则不能进行数据类型转换。二是指针变量和引用变量都用来指向其它变量,但指针变量使用的语法要复杂一些;定义引用变量后,其使用方法和普通变来那个相同。
例如:
int a;
int *pa=&a;
int & ia=a;
示例代码如下:
// 5.16.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
using namespace std;
void main()
{
int a;
int & ref_a = a;
a = ;
cout << "a= " << a << endl;
cout << "ref_a=" << ref_a << endl;
a = ;
cout << "a= " << a << endl;
cout << "ref_a=" << ref_a << endl;
int b = ;
ref_a = b;
cout << "a= " << a << endl;
cout << "ref_a=" << ref_a << endl;
ref_a--;
cout << "a= " << a << endl;
cout << "ref_a=" << ref_a << endl;
}
运行结果:
C++入门经典-例5.16-输出引用的更多相关文章
- C++入门经典-例5.20-右值引用传递参数
1:使用字面值(如1.3.15f.true),或者表达式等临时变量作为函数实参传递时,按左值引用传递参数会被编译器阻止.而进行值传递时,将产生一个和参数同等大小的副本.C++11提供了右值引用传递参数 ...
- C++入门经典-例5.18-通过引用交换数值
1:在C++中,函数参数的传递方式主要有两种,即值传递和引用传递.值传递是指在函数调用时,将实际参数的值赋值一份传递到调用函数中,这样如果在调用函数中修改了参数的值,其改变将不会影响到实际参数的值.而 ...
- C++入门经典-例5.17-右值引用的定义
1:右值引用的定义: 类型 && i=被引用的对象: 左值与右值的区别在于,右值是临时变量,例如,函数的返回值,并且无法被改变. 当右值引用被初始化后,临时变量消失. 代码如下: // ...
- C++入门经典-例2.11-流输出小数控制
1:代码如下: // 2.11.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...
- C++入门经典-例6.12-使用数组地址将二维数组输出
1:以a[4][3]为例 a代表二维数组的地址,通过指针运算符可以获取数组中的元素 (1)a+n代表第n行的首地址 (2)&a[0][0]既可以看作第0行0列的首地址,同样也可以被看作是二维数 ...
- C++入门经典-例5.19-指针的引用与传递参数
1:引用传递参数与指针传递参数能达到同样的目的.指针传递参数也属于一种值传递,其传递的是指针变量的副本.如果使用指针的引用,就可以达到在函数体内改变指针地址的目的.运行代码如下: // 5.19.cp ...
- C++入门经典-例2.10-控制输出精确度
1:代码如下: // 2.10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...
- C++入门经典-例3.25-使用循环输出闰年
1:代码如下: // 3.25.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...
- C++入门经典-例3.23-使用嵌套循环输出乘法口诀表
1:代码如下: // 3.23.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iomanip> #incl ...
随机推荐
- Max History CodeForces - 938E (组合计数)
You are given an array a of length n. We define fa the following way: Initially fa = 0, M = 1; for e ...
- 提升scrapy的爬取效率
增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100. 降低日志级别 ...
- java实现spark常用算子之frist
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- Spark运行时的内核架构以及架构思考
一: Spark内核架构 1,Drive是运行程序的时候有main方法,并且会创建SparkContext对象,是程序运行调度的中心,向Master注册程序,然后Master分配资源. 应用程序: A ...
- Django框架——基础之路由系统(urls.py)11111111
1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...
- Linux操作系统的常用命令(一)
一.写随笔的原因:上次提到centos7.3安装mysql5.7的一些步骤,恰巧最近面试有碰到一些问LInux操作的常用操作的问题,想通过这篇文章MARK一下,不一定能够全,只是用的比较多的吧(lin ...
- 13、Nginx七层负载均衡
1.Nginx负载均衡基本概述 1.1为什么需要使用负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡, ...
- 这打车App麻烦了!遭黑客勒索巨额比特币
6月17日下午,易到用车发布<客服电话故障公告>称,5月25日-26日,易到平台遭到网络黑客攻击,核心服务器被入侵,攻击导致易到核心数据被加密,服务器宕机,绝大部分服务功能受到波及,且攻击 ...
- 七,ingress及ingress cluster
目录 Service 类型 namespace 名称空间 Ingress Controller Ingress Ingress-nginx 进行测试 创建对应的后端Pod和Service 创建 Ing ...
- verilog 实用的小技巧
(之后还会持续的更新) 移位操作的实现: verilog有一种非常简单的移位操作实例如下: reg [3:0] source; reg out; {out,source[3:0]}={source[3 ...