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类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有 ...
随机推荐
- 解释一下Spring AOP里面的几个名词?
(1)切面(Aspect):被抽取的公共模块,可能会横切多个对象.在Spring AOP中,切面可以使用通用类(基于模式的风格)或者在普通类中以@AspectJ注解来实现. (2)连接点(Join p ...
- Springmvc入门基础(四) ---参数绑定
1.默认支持的参数类型 处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值. 除了ModelAndView以外,还可以使用Model来向页面传递数据, Model是一个接口,在参数里直接声明 ...
- BMZCTF 2020祥云杯到点了
2020祥云杯到点了 下载附件得到三个word文档,我们打开第一个文档然后将隐藏文字显示出来 得到提示 我们查看属性应该就是日期了我们先把他记录下来 然后打开第二个文档 输入刚刚的密码 在第二个wor ...
- 学习移动机器人SLAM、路径规划必看的几本书
作者:小白学移动机器人链接:https://zhuanlan.zhihu.com/p/168027225来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 声明:推荐正版图 ...
- html5网页录音和语音识别
背景 在输入方式上,人们总是在追寻一种更高效,门槛更低的方式,来降低用户使用产品的学习成本.语音输入也是一种尝试较多的方式,有些直接使用语音(如微信语音聊天),有些需要将语音转化为文字(语音识别).接 ...
- 设计模式之:工厂方法模式FactoryMethodPattern的实现
本例用到了配置文件.接口.反射.多态: 满足的设计原则: 通过工厂,实现创建对象和使用对象的分离,实现松耦合,满足迪米特法则: 通过配置文件指定创建对象类型,而不需更改源代码,满足开闭原则: 容易实现 ...
- throws子句在继承当中overrride时有什么规则
8.throws子句在继承当中overrride时的规则 马克-to-win:当子类方法override父类方法时,throws子句不能引进新的checked异常.换句话说:子类override方法的 ...
- java中封装encapsulate的概念
封装encapsulate的概念:就是把一部分属性和方法非公有化,从而控制谁可以访问他们. https://blog.csdn.net/qq_44639795/article/details/1018 ...
- mysql 合并查询结果
UNION 使用 UNION 关键字是,数据库系统会将所有的查询结果合并到一起,然后去除掉相同的记录: UNION ALL 使用 UNION ALL,不会去除掉系统的记录:
- Java 将Map按Value值降序排列
1 /** 2 * 将集合按照降序排列-FLOAT 3 * @param nowPartTwoData 4 * @return 5 */ 6 private static List<Map.En ...