C++基础-2-引用
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-引用的更多相关文章
- 【转载】 Java 7之基础 - 强引用、弱引用、软引用、虚引用
原文地址:http://blog.csdn.net/mazhimazh/article/details/19752475 1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一 ...
- Java 7之基础 - 强引用、弱引用、软引用、虚引用
1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object(); // 强引用 当内 ...
- C++基础之引用与指针的区别与联系、常引用使用时应注意的问题
什么是引用? 引用就是对变量起一个别名,而变量还是原来的变量,并没有重新定义一个变量.例如下面的例子: #include<iostream> using namespace std; ...
- Java基础之引用(String,char[],Integer)总结
1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...
- Java基础之引用(String,char[],Integer)总结于牛客网的专项练习题
1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...
- 【C++】基础及引用
输出 #include "iostream" //包含c++的头文件 //iostream.h using namespace std; //使用命名空间 std 标准的命名空间 ...
- c++基础之引用reference
1.何为引用 简单来说就是,比如你换了个新名字,用新名字叫你,你也会答应 2.引用vs指针 -引用没有null,好比你说你换了个新名字,但是新名字是啥总得有点东西 -一旦引用被初始化后就不可以指到另外 ...
- C++语言基础(8)-引用
(重要)使用引用的一些注意点: 1.引用不能绑定临时数据,也不能绑定任何无法获取内存地址的常量,表达式,或值,常引用除外. 第一种写法:(错误) int func_int(){ ; return n; ...
- Java基础 - 强引用、弱引用、软引用、虚引用
1.强引用(StrongReference) 强引用是使用最普遍的引用. 假设一个对象具有强引用.那垃圾回收器绝不会回收它.例如以下: [java] view plaincopyprint" ...
- java基础(4):引用数据类型、流程控制语句
1. 引用数据类型 1.1 Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有 ...
随机推荐
- Redis的Jedis操作(五)
需要把jedis依赖的jar包添加到工程中.Maven工程中需要把jedis的坐标添加到依赖. 推荐添加到服务层. 1.连接单机版 第一步:创建一个Jedis对象.需要指定服务端的ip及端口. 第二步 ...
- 什么是 Spring Framework?
Spring 是一个开源应用框架,旨在降低应用程序开发的复杂度.它是轻量级.松 散耦合的.它具有分层体系结构,允许用户选择组件,同时还为 J2EE 应用程序 开发提供了一个有凝聚力的框架.它可以集成其 ...
- “a==b”和”a.equals(b)”有什么区别?
如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指 向的是堆中的同一个对象才会返回 true,而 a.equals(b) 是进行逻辑比较,所以 通常需要重写该方法来 ...
- Netty + Spring + ZooKeeper搭建轻量级RPC框架
本文参考 本篇文章主要参考自OSCHINA上的一篇"轻量级分布式 RPC 框架",因为原文对代码的注释和讲解较少,所以我打算对这篇文章的部分关键代码做出一些详细的解释 在本篇文章中 ...
- 当心,你搞的Scrum可能是小瀑布
摘要:有的团队刚接触Scrum,一个问题令他们很困扰:迭代初期开发人员的工作较多,测试人员闲着:迭代末期开发人员闲着,测试人员的工作比较多,怎么解决资源等待的问题呢? 本文分享自华为云社区<当心 ...
- 在一个元素上:hover,改变另一个元素的css属性
如果二者是父子关系,可以写成这种: .face:hover .eye-bottom { margin-top: 30px; } 如果是兄弟关系: .face:hover+.ear-wrap { tra ...
- CSS 常用的定位和布局方法汇总(已添加源码地址)
CSS-Layout 旨在打造详尽的前端布局代码学习库(自从用了框架开发,CSS生疏了不少,所以开这个库练练手)SF不能正确解析含有中文的网址,所以某些预览链接无法跳转,请访问我的博客阅读此文 常见定 ...
- python大佬养成计划----基于flask_sqlalchemy的网页显示数据库信息
网页显示数据库信息 使用我们刚学习的flask_sqlalchemy,在网页中显示数据库表中的数据.在开始运行程序前,确保数据库中执行过创建表和创建用户的操作,详见链接描述. # 模板文件templa ...
- PC端免费高效的同声翻译
疫情期间上网课,对于英语听力较差或者需要观看英文视频,但实际上并没有双语字幕的这种情况下需要找一个实时的翻译工具.虽然说手机上此类软件比较多,但电脑上没有特别合适的应用可以做为一个免费实时翻译.哪怕是 ...
- java中异常到底有什么用?举例
异常的意义:马克-to-win:通过上面的例子,我们看出通过引入异常这种技术,即使出现不测(用户把0赋给除数),也可以让程序不崩溃,还能继续优雅 的运行.那,这种技术有用,值得学.马克-to-win: ...