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 Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解: @SpringBootConfiguration:组合了 ...
- Kafka 新旧消费者的区别?
旧的 Kafka 消费者 API 主要包括:SimpleConsumer(简单消费者) 和 ZookeeperConsumerConnectir(高级消费者).SimpleConsumer 名字看起来 ...
- Java程序要操作数据库,一定要使用JDBC技术吗?
<!-- MySQL驱动,连接数据库用,由数据库厂商提供 --> <dependency> <groupId>mysql</groupId> <a ...
- kafka指定partiton生产
kafka发送一个消息的时候需要封装成一个ProducerRecord : public ProducerRecord(String topic, Integer partition, Long ti ...
- (stm32f103学习总结)—待机唤醒实验
一.STM32待机模式介绍 1.1 STM32低功耗模式介绍 很多单片机具有低功耗模式,比如MSP430.STM8L等,我们的STM32 也不例外.默认情况下,系统复位或上电复位后,微控制器进入运行模 ...
- html5中常被忘记的标签,属性
placeholder placeholder是input中的属性,就是默认输入的text,当用户输入时,text会被清空. 用法 <input type ="text" p ...
- html5 canvas基础10点
本文主要讲解下一些canvas的基础 1.<canvas id="canvas">若此浏览器不支持canvas会显示该文字</canvas> //创建个ht ...
- 用vue开发一个猫眼电影web app
前言:之前一直在学习原生的javascript,但是无奈功力太浅,学了很长时候也只能写一些简单的小demo,知道遇见了vue,一切都变了,他的双向绑定和组件化思想让我迅速的爱上了他,可是光学不练是没有 ...
- pytest-mark 参数化
在类前或用例前用pytest.mark.parametrize ,可进行参数化 传参方式比较灵活,有很多种,下面是列出的几种方式,其他的可自行研究 @pytest.mark.parametrize(& ...
- 文件上传——IIS6.0解析漏洞
介绍 IIS6.0漏洞可分为目录漏洞和文件漏洞 目录漏洞 访问*.asp格式命令的文件夹下的文件,都会被当成asp文件执行 文件漏洞 畸形文件命名 123.asp -> 123.asp;.txt ...