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类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有 ...
随机推荐
- jvm-learning-类加载子系统
类加载子系统的作用 类加载器ClassLoader角色 类的加载过程(广义加载) 加载 加载.class文件的方式 连接Linker 初始化 注意:如果类种没有变量赋值动作和静态代码块的语句是不 ...
- JDBC 能否处理 Blob 和 Clob?
Blob 是指二进制大对象(Binary Large Object),而 Clob 是指大字符对象 (Character Large Objec),因此其中 Blob 是为存储大的二进制数据而设计的, ...
- 阐述 final、finally、finalize 的区别?
final:修饰符(关键字)有三种用法:如果一个类被声明为 final,意味 着它不能再派生出新的子类,即不能被继承,因此它和 abstract 是反义词.将 变量声明为 final,可以保证它们在使 ...
- centos 后台 运行jar包方法
后台运行jar包方法: 1.nohup java -jar shareniu.jar & nohup意为后台不挂断运行,与是否账号退出无关 2.nohup java -jar shareniu ...
- Python模块导入方式
import导入方式 from...import导入方式 from...import... 导入模块相当于在此文件中写了所导入函数名(对比c/c++中的.h文件来理解),所以在之后使用导入的函数直接 ...
- keil Uvision4 面向51单片机数据类型属性一览表
- React+dva+webpack+antd-mobile 实战分享(二)
第一篇 https://segmentfault.com/a/11... 在上一篇文章中教给大家了怎么搭建项目的架子:那么今天我们就来说一下项目里的导航和列表的实现 导航 废话不说啦 下面直接给大家讲 ...
- 常用 adb 命令总结
1. 显示当前运行的全部模拟器: adb devices 2. 安装应用程序: adb install -r 应用程序.apk 3. 获取模拟器中的文件: a ...
- sql server学习总结一
一,数据库的三级模式结构 1. 模式 模式又称逻辑模式或者概念模式,是数据库中全体数据的逻辑结构和特征的描述,一个数据库只有一个模式,模式处于三级结构的中间层. 2. 外模式 外模式又称用 ...
- vue里面v-for显示红色波浪线
vue里面使用v-for代码显示红色的波浪线,解决办法: before: <div v-for="tmsgs in msg.message"></div> ...