C++核心编程 2 引用
引用的基本使用
作用:给变量起别名 ,语法:数据类型 & 别名 = 原名
注意:引用必须初始化,且初始化之后,就不可更改、
引用做函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参
实例:
#include<iostream>
using namespace std; //交换函数 //1、值传递
void Swap1(int a, int b)
{
int temp = a;
a = b;
b = temp;
//cout << "Swap1 a=" << a << " " << "Swap1 b=" << b << endl; //值传递
} //2、地址传递
void Swap2(int * a, int * b)
{
int temp = *a;
* a = * b;
* b = temp;
//cout << "Swap2 a=" << *a << " " << "Swap2 b=" << *b << endl; //地址传递
} //3、引用传递
void Swap3(int &a , int &b)
{
int temp = a;
a = b;
b = temp;
cout << "Swap3 a=" << a << " " << "Swap3 b=" << b << endl; //引用传递
} int main()
{
int a = 10;
int b = 20; //Swap1(a, b); //值传递,形参不会修饰实参
//cout << "a=" << a << " " << "b=" << b << endl; //值传递打印:a=10,b=20 //Swap2(&a, &b); //地址传递,形参会修饰实参
//cout << "a=" << a << " " << "b=" << b << endl; //地址传递打印:a=20,b=10 Swap3(a, b); //引用传递,形参会修饰实参
cout << "a=" << a << " " << "b=" << b << endl; //引用传递打印:a=20,b=10
system("pause");
return 0;
}
总结:通过引用参数产生的效果同地址传递是一样的,引用的语法更清晰简单
引用做函数返回值
作用:引用是可以作为函数的返回值存在的。用法:函数调用作为左值
注意:不要返回局部变量引用
实例:
#include<iostream>
using namespace std; //引用做函数的返回值
//1、不要返回局部变量的引用
int& test1()
{
int a = 10; //局部变量存放在四区中的 栈区
return a;
} //2、函数的调用可以作为左值
int& test2()
{
static int a = 10; //加上关键字static ,局部变量a就变成了静态变量;静态变量存放在全局区,全局区的数据在程序结束后由系统释放
return a;
} int main()
{
//int &ref = test1(); //cout << "ref=" << ref << endl; //第一次结果正确,是因为编译器做了一次保留
//cout << "ref=" << ref << endl; //第二次结果错误,是因为 栈区 中存放的 局部变量 a 的内存已经被释放 int& ref = test2(); cout << "ref=" << ref << endl; //ref=10
cout << "ref=" << ref << endl; //ref=10 test2() = 1000; //如果函数的返回值是引用,函数的调用可以作为左值 cout << "ref=" << ref << endl; //ref=1000
cout << "ref=" << ref << endl; //ref=1000 system("pause");
return 0;
}
引用的本质:
引用的本质在C++内部实现是一个指针常量
实例:
结论:C++推荐使用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了
常量引用:
作用:常量引用主要是用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参
实例:
#include<iostream>
using namespace std; //常量引用
//主要是用来修饰形参,防止误操作 void ShowVal(const int &val)
{
//val = 1000;
cout << "val=" << val << endl;
} int main()
{
//int a = 10;
//int& ref = 10; //引用必须引一块合法的内存空间
const int & ref = 10; //加上const后 编译器将代码修改 int temp = 10; int & ref = temp;
//ref = 20; //加入const之后 变为只读,不可修改 int a = 100;
ShowVal(a);
cout << "a=" << a << endl; system("pause");
return 0;
}
C++核心编程 2 引用的更多相关文章
- Qt on Android 核心编程
Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!) 安晓辉 著 ISBN 978-7-121-24457-5 2015年1月出版 定价:65.00元 4 ...
- windows核心编程 - 线程同步机制
线程同步机制 常用的线程同步机制有很多种,主要分为用户模式和内核对象两类:其中 用户模式包括:原子操作.关键代码段 内核对象包括:时间内核对象(Event).等待定时器内核对象(WaitableTim ...
- windows核心编程---第九章 同步设备IO与异步设备IO之同步IO
同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很 ...
- windows核心编程---第八章 使用内核对象进行线程同步
使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步 ...
- Python核心编程-闭包
百度搜了一下闭包的概念:简而言之,闭包的作用就是在外部函数执行完并返回后,闭包使得收机制不会收回函数所占用的资源,因为内部函数的执行需要依赖外函数中的变量.这是对闭包作用的非常直白的描述,不专业也不严 ...
- 【windows核心编程】 第六章 线程基础
Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ① 一个是线程的内核 ...
- python核心编程第二版笔记
python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d 提供调试输出1.2 –O 生成优化的字节码(生成 ...
- 学习《Python核心编程》做一下知识点提要,方便复习(一)
学习<Python核心编程>做一下知识点提要,方便复习. 计算机语言的本质是什么? a-z.A-Z.符号.数字等等组合成符合语法的字符串.供编译器.解释器翻译. 字母组合后产生各种变化拿p ...
- python核心编程--笔记
python核心编程--笔记 的解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找pyt ...
随机推荐
- C# - 音乐小闹钟_BetaV3.0
时间:2017-11-22 作者:byzqy 介绍: 音乐小闹钟 BetaV3.0 新鲜出炉了,快来围观吧!上效果图: 是不是觉得顿时变得高大上了许多呢?^_^ 工具/原料: (操作系统:Window ...
- eclipse 将本地插件引用(多种方法)
eclipse 将本地插件引用(多种方法) 因为工作原因需要使用eclipse,而接触的项目需要一个eclipse的插件才可以进行一些特殊的使用,但是因为年久用的人也少,我解压原先带有插件版本的ecl ...
- springboot通过AOP和自定义注解实现权限校验
自定义注解 PermissionCheck: package com.mgdd.sys.annotation; import java.lang.annotation.*; /** * @author ...
- Python - //和/的区别
/ 表示浮点数除法,返回浮点结果; // 表示整数除法,返回不大于结果的一个最大的整数 print("6 // 4 = " + str(6 // 4)) print("6 ...
- Pytest系列(12)- 测试结果生成HTML报告插件之pytest-html的详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 环境前提 Python3.6+ 安 ...
- Mysql常用sql语句(11)- between and 范围查询
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 between and可以判断值是否在指定范围内 ...
- 通过HttpURLConnection下载图片到本地--下载附件
一.背景说明 现在我做的系统中,需要有一个下载附件的功能,其实就是下载图片到本地中.相应的图片保存在多媒体系统中,我们只能拿到它的资源地址(url),而不是真实的文件. 这里记录的是下载单个图片.下篇 ...
- 硕盟 TYPE C转HDMI+VGA+USB3.0+PD3.0四口扩展坞
硕盟SM-T54是一款USB-C 四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显示器.电视机或其他显示设备.产品可以接入硬盘. ...
- 缓存一致性?get💡
大家好,我是老三,今天又是被算法致郁的一天,写篇文章缓一缓. 这篇文章,我们来看看缓存一致性问题. 缓存一致性 我接下来会巴巴说一堆缓存一致性,但是-- 作为一名暴躁老哥,我先把结论撂这了! 缓存和数 ...
- study day2
study day2 windows 常用快捷键 CTRL C:复制 CTRL V:粘贴 CTRL A:全选 CTRL X:剪切 CTRL S:保存 CTRL Z:撤销 alt f4:关闭窗口 shi ...