2. 引用

2.1 引用的基本语法

 1 #include<iostream>
2 using namespace std;
3
4
5 int main() {
6
7 //引用的基本语法
8 //数据类型 &别名 = 原名
9
10 int a = 10;
11 //创建引用
12 int& b = a;
13
14 cout << "a = " << a << endl;
15 cout << "b = " << b << endl;
16
17 b = 100;
18 cout << "a = " << a << endl;
19 cout << "b = " << b << endl;
20
21
22 system("pause");
23 return 0;
24 }
25
26
27
28 //总结
29 //作用:给变量起别名
30 //语法:数据类型 &别名 = 原名
31 //操纵的是同一块内存

2.2 引用的注意事项

 1 #include<iostream>
2 using namespace std;
3
4
5 int main() {
6
7 int a = 10;
8
9 //1、引用必须初始化
10 //int &b; //错误,必须初始化
11 int &b = a;
12
13 //2、引用在初始化后,不可以改变
14 int c = 20;
15 b = c; //赋值操作,而不是更改引用
16
17 cout << "a = " << a << endl;
18 cout << "b = " << b << endl;
19 cout << "c = " << c << endl;
20
21 system("pause");
22
23 return 0;
24 }
25
26
27 //总结
28 //引用必须初始化
29 // 引用在初始化后,不可以改变
30 //

2.3 引用做函数参数

 1 #include<iostream>
2 using namespace std;
3
4
5 //交换函数
6
7 //1.值传递
8 void mySwap01(int a, int b) {
9 int temp = a;
10 a = b;
11 b = temp;
12 cout << "swap01_a = " << a << endl;
13 cout << "swap01_b = " << b << endl;
14 }
15
16 //2.地址传递
17 void mySwap02(int* a, int* b) {
18 int temp = *a;
19 *a = *b;
20 *b = temp;
21
22 }
23 //3.引用传递
24 void mySwap03(int& a, int& b) {
25 int temp = a;
26 a = b;
27 b = temp;
28 }
29
30
31 int main() {
32
33 int a = 10;
34 int b = 20;
35 mySwap01(a, b); //值传递,形参不会修饰实参
36
37 cout << "a = " << a << endl;
38 cout << "b = " << b << endl;
39
40 mySwap02(&a, &b); //地址传递,形参会修饰实参
41 cout << "a = " << a << endl;
42 cout << "b = " << b << endl;
43
44 mySwap03(a, b); //引用传递,形参也会修饰实参
45 cout << "a = " << a << endl;
46 cout << "b = " << b << endl;
47
48 system("pause");
49
50 return 0;
51 }
52
53 //总结
54 // 作用:传参数时,可以利用引用的技术让形参修饰实参
55 // 优点:可以简化指针修改实参
56 //通过引用参数产生的效果与地址传递的方式一样,引用的语法更加简单清楚

2.4 引用做函数返回值

 1 #include<iostream>
2 using namespace std;
3
4 //引用做函数的返回值
5 //1、不要返回局部变量的引用
6 int& test01() {
7 int a = 10; //局部变量存放在栈区
8 return a; // test01函数的返回值类型是引用;
9 }
10
11 //2、函数的调用可以作为左值
12 int& test02() {
13 static int a = 10; //静态变量存放在全局区,程序结束后系统释放
14 return a;
15 }
16
17
18
19 int main() {
20
21 //int& ref = test01();
22 //cout << "ref = " << ref << endl; //报错,不能返回局部变量的引用
23
24
25 int& ref2 = test02();
26 cout << "ref2 = " << ref2 << endl;
27
28 test02() = 1000; //本质为 a=1000
29 // 如果函数的返回值是引用,这个函数调用可以作为左值
30 cout << "ref2 = " << ref2 << endl;
31
32 system("pause");
33
34 return 0;
35 }
36
37 //总结
38 // 作用:引用可以作为函数的返回值存在
39 // 注意:不要返回局部变量的引用
40 //用法:函数调用作为左值

2.5 引用的本质

#include<iostream>
using namespace std; int main() { int a = 10;
cout << "a = " << a << endl; int& ref = a;
//当出现引用int &ref = a时,系统会进行自动转换为:
//int * const ref = &a ;
//指针的指向不可以修改,指针的值可以修改 ref = 20; //内部发现ref是引用,自动帮我们转换为: * ref = 20; cout << "a = " << a << endl;
cout << "ref = " << ref << endl; system("pause"); return 0;
} //总结
//本质:引用的本质是C++内部实现一个指针常量
//指针常量:指针的指向不可以修改,指针的值可以修改
//C++推荐使用引用技术,语法方便
//回顾:
//常量指针:指针的指向可以修改,指针的值不可以修改

2.6 常量引用

#include<iostream>
using namespace std; //打印数据
void showValue(const int& val) {
//val = 1000;
cout << "Val = " << val << endl;
} int main() { int a = 10; //int& ref = 10; //错误的,引用必须引用一块合法的内存空间
//int& ref = a; //正确的 //加上const后,编译器将代码修改为 int temp = 10; const int & ref = temp;
const int& ref = 10;
//ref = 10; // 错误,加入const后变为只读,不可修改了 int b = 100; showValue(b);
cout << "b = " << b << endl; system("pause"); return 0;
} //总结
//作用:常量引用主要是用来修饰形参,防止误操作
//在形参列表中,可以加入const修饰形参,防止形参改变实参

参考:《黑马程序员》C++教程

C++基础-2-引用的更多相关文章

  1. 【转载】 Java 7之基础 - 强引用、弱引用、软引用、虚引用

    原文地址:http://blog.csdn.net/mazhimazh/article/details/19752475 1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一 ...

  2. Java 7之基础 - 强引用、弱引用、软引用、虚引用

    1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object();   //  强引用 当内 ...

  3. C++基础之引用与指针的区别与联系、常引用使用时应注意的问题

    什么是引用? 引用就是对变量起一个别名,而变量还是原来的变量,并没有重新定义一个变量.例如下面的例子:   #include<iostream> using namespace std; ...

  4. Java基础之引用(String,char[],Integer)总结

    1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer  ...

  5. Java基础之引用(String,char[],Integer)总结于牛客网的专项练习题

    1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...

  6. 【C++】基础及引用

    输出 #include "iostream" //包含c++的头文件 //iostream.h using namespace std; //使用命名空间 std 标准的命名空间 ...

  7. c++基础之引用reference

    1.何为引用 简单来说就是,比如你换了个新名字,用新名字叫你,你也会答应 2.引用vs指针 -引用没有null,好比你说你换了个新名字,但是新名字是啥总得有点东西 -一旦引用被初始化后就不可以指到另外 ...

  8. C++语言基础(8)-引用

    (重要)使用引用的一些注意点: 1.引用不能绑定临时数据,也不能绑定任何无法获取内存地址的常量,表达式,或值,常引用除外. 第一种写法:(错误) int func_int(){ ; return n; ...

  9. Java基础 - 强引用、弱引用、软引用、虚引用

    1.强引用(StrongReference) 强引用是使用最普遍的引用. 假设一个对象具有强引用.那垃圾回收器绝不会回收它.例如以下: [java] view plaincopyprint" ...

  10. java基础(4):引用数据类型、流程控制语句

    1. 引用数据类型 1.1 Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有 ...

随机推荐

  1. Web,RESTful API 在微服务中的作用是什么?

    微服务架构基于一个概念,其中所有服务应该能够彼此交互以构建业务功能.因 此,要实现这一点,每个微服务必须具有接口.这使得 Web API 成为微服务的一 个非常重要的推动者.RESTful API 基 ...

  2. springboot-数据库访问之mybatis

    选中mysqldirver,数据库驱动器 选中jdbc ,帮我们配置数据源,连接数据库 选中mybatis,持久层 <!-- 这个不是springboot官方出来的,是mybatis为了设备sp ...

  3. 学习 Haproxy (二)

    1. Haproxy介绍 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备.虚拟主机.基于TCP和HTTP应用代理等功能.其配置简单,而且拥有很好的对服务器节点的 ...

  4. CEPH-3:cephfs功能详解

    ceph集群cephfs使用详解 一个完整的ceph集群,可以提供块存储.文件系统和对象存储. 本节主要介绍文件系统cephfs功能如何灵活的使用,集群背景: [cephadmin@yq01-aip- ...

  5. 深入理解FIFO(包含有FIFO深度的解释)

    FIFO: 一.先入先出队列(First Input First Output,FIFO)这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令. 1.什么是FIFO? FIFO是 ...

  6. python学习笔记(五)——静态方法、类方法、运算符重载

    我们都知道类名是不能够直接调用类方法的.在C++中,把成员方法声明为 static 静态方法后可以通过类名调用.同样的在python中也可以通过定义静态方法的方式让类名直接调用. 静态方法 使用 @s ...

  7. AWS 6R

    "The 6 R's": 6 Application Migration Strategies "The 6 R's": 6 Application Migra ...

  8. 微信小程序要求HTTPS,如何选择SSL证书?

    为了保护小程序应用安全,微信官方的需求文档要求,每个微信小程序必须事先设置一个通讯域名,并通过HTTPS请求进行网络通信,不满足条件的域名和协议无法请求.因此开发者应先准备好配置好HTTPS证书的域名 ...

  9. android SQLite数据库(转)

    Android数据库 之 SQLite数据库   Android数据库  一.关系型数据库SQLIte 每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无 ...

  10. idea 配置mapper.xml代码提示

    从代码跳转mapper文件的插件: 在mapper文件中添加dtd约束: 1.下载dtd约束文件 http://mybatis.org/dtd/mybatis-3-config.dtd   http: ...