资料介绍
《数据结构 C语言 》电子教案免费下载
转变二、 声明位置的转变
C语言里,变量声明必须放在一个函数的开头,但在C++里,却不需要这么做,你可以在任何地方声明一个变量。而且,建议你尽量等需要用的时候再去定义一个变量。
转变三、 引用类型的引入
先来看下面一个例子:
#include
void swap(int a,int b)
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int a=1,b=2;
swap(a,b);
printf("a=%d,b=%d",a,b);
}
输出结果:
a=1,b=2
写出这个程序的人,它编写的swap函数本意是想让两个参数的值互相交换。但是,我们知道,C语言里参数的传递都是以值传递的方式进行的,也就是说,这里将把作为实参的a,b的值赋值给作为形参的a,b,这样形参与实参并不是同一片内存空间,对形参a所做的赋值操作根本不会对实参a有任何的影响,所以最终会发现这个swap函数根本没有起到任何作用。
作为C语言高手的你会告诉我,想实现两个数交换,应该这么写:
#include
void swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
int main()
{
int a=1,b=2;
swap(&a,&b);
printf("a=%d,b=%d",a,b);
}
确实,这个程序能达到交换两个值的效果,可是,我们要操作的是两个变量的值,而不是其地址,却需要往函数里传递两个变量的地址。总是让人感到不太直观。
C++里就出现了引用类型。
这样,原程序就可以这么写
#include
void swap(int &a,int &b) //只有这一行与原来的程序不同
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int a=1,b=2;
swap(a,b);
printf("a=%d,b=%d",a,b);
}
这样,这个swap函数就对它的两个参数a,b的值进行了交换。
你可能会惊奇的问:什么?竟然在形参声明时对a取地址?
咱们先撇开上面的例子来说一下引用类型变量:
1. 引用类型相当于给变量起了一个别名
变量名就是一个用以标识一片内存区域的标识符,而声明引用变量就相当于给这片内存区域重新起了一个名字。这句话你现在看肯定不太清楚它是什么意思,但,请带着这句话看下面的几点
2. 引用类型变量的初始化
定义一个引用类型的变量时,这个&仅仅是用来表示声明的变量是是引用类型变量(而并非取地址的意思)。如
int a=123;
int &b=a;
b就是一个引用类型变量,它绑定在一个int类型的变量a上。如果现在输出b的值,就会得到b的值为123.
我们定义一个引用类型的变量时,必须用它所绑定的类型的一个变量对它进行初始化。
int a=123;
int &b1=a; //正确
int &b2; //错误,必须初始化
int &b3=123; //错误,必须用int型变量来进行初始化,而不能用常量来初始化。
3. 对引用类型变量进行赋值
先来看下面一段代码。
int a=123,b=234;
int &c=a;
c=b;
这时,a和c的值是多少?
有两种想法,第一种想法是c=b的意思和初始化时c=a那里差不多,表示让c从现在起开始绑定到b.所以a的值是123,c的值是234,这种想法很有依据,那就是指针变量就是这个样子,不过我可以很负责任的告诉你,这种想法在这里是错误的,至少,编译器和你的想法不一样。事实上,除了初始化的时候之外,你对一个引用类型的变量进行任何的操作,都相当于对它所绑定的变量进行了相同的操作,这个“任何”是包括赋值操作的。所以,这里c=b就相当于是a=b,执行了该操作后,a,c的值都变为234。
好,现在我们再来回头看一下前面那个程序,为了区别形参a,b和实参a,b,这里我把实参a,b记作a',b'.
形参列表里的int &a,int &b就相当于int &a'=a,int &'b=b
这样,a'绑定到了a上,成了a的另一个名字,b'就成了b的另一个名字,因此,对a',b'做的任何操作,都相当于对a,b进行了对应操作,这也就使形参与实参共用了同一片内存地址,便可以实现在函数中改变实参的值了。
这样,swap函数才真正直到了交换两个参数的值的作用。
4. const引用
const引用就是绑定在const对象上的引用。
如 const int data=123;
const int& data2=data; //正确
int &data3=data; //错误
//不能将int&型变量绑定在const int型变量上
但,可以用const int&变量绑定在int型变量上。如:
int data=123;
const int &data2=data; //正确
此后,可以利用给data赋值来给这片内存区域赋值,但却不能给data2赋值,因为data2是const int&型。
由于引用类型作为参数时,不是真正的值传递,形参与实参共用同一片内存区域,所以在用一些大的结构体对象或大的类对象(类是一种与结构体类似,但比结构体强大得多的东西,本书后面大部分内容都是在讲它)作参数时,可以把函数的形参声明为引用类型,以减小值传递所带来的开销。而且,在多数情况下,为了避免做为实参的对象在函数内不被修改,可以把形参设置为const引用。
- 数据结构与算法分析课件免费下载 0次下载
- 数据结构与算法分析—C语言描述 17次下载
- 什么是数据结构?为什么要学习数据结构?数据结构的应用实例分析 14次下载
- 为什么要学习数据结构?数据结构的应用详细资料概述免费下载 13次下载
- 数据结构与算法分析的C语言描述的电子教材详细资料免费下载 0次下载
- 30G最全最新小甲鱼视频教程汇编语言c语言c++DELPHI数据结构Python资料下载 58次下载
- 数据结构-C语言描述(陈慧南) 0次下载
- 数据结构C++语言描述 0次下载
- 数据结构(C语言版) 0次下载
- 数据结构与算法分析C++描述(第3版) 0次下载
- 数据结构与算法分析:C语言描述(原书第2版) 0次下载
- 数据结构与算法分析(C语言版) 0次下载
- 数据结构(C#语言版) 0次下载
- C语言课程设计电子教案(课件) 0次下载
- 数据结构教程,下载 0次下载
- 探索编程世界的七大数据结构 955次阅读
- C语言数据结构之跳表详解 1.9k次阅读
- 不同数据结构的定义代码 1.2k次阅读
- 嵌入式软件常见的8种数据结构 1.7k次阅读
- SystemVerilog中可以嵌套的数据结构 2.5k次阅读
- 解析数据结构的常用七大排序算法 2.3k次阅读
- 使用51单片机读写AT29C040的C语言程序免费下载 5.8k次阅读
- 什么是数据结构 数据及数据之间的关系分析 8.3k次阅读
- 数据结构有哪些知识重点 2.7k次阅读
- 嵌入式C语言中的组成结构是什么 941次阅读
- 区块链的基本数据结构解析 8.1k次阅读
- 介绍pandas的两种数据结构 5.9k次阅读
- java中几种常用数据结构 1.5w次阅读
- 数据结构常见的八大排序算法 2k次阅读
- java数据结构学习 995次阅读
下载排行
本周
- 1MDD品牌三极管BC807数据手册
- 3.00 MB | 次下载 | 免费
- 2MDD品牌三极管BC817数据手册
- 2.51 MB | 次下载 | 免费
- 3MDD品牌三极管D882数据手册
- 3.49 MB | 次下载 | 免费
- 4MDD品牌三极管MMBT2222A数据手册
- 3.26 MB | 次下载 | 免费
- 5MDD品牌三极管MMBTA56数据手册
- 3.09 MB | 次下载 | 免费
- 6MDD品牌三极管MMBTA92数据手册
- 2.32 MB | 次下载 | 免费
- 7STM32G474 HRTIME PWM 丢波问题分析与解决
- 1.00 MB | 次下载 | 3 积分
- 8新能源电动汽车高压线束的铜铝连接解决方案
- 2.71 MB | 次下载 | 2 积分
本月
- 1爱华AIWA HS-J202维修手册
- 3.34 MB | 37次下载 | 免费
- 2PC5502负载均流控制电路数据手册
- 1.63 MB | 23次下载 | 免费
- 3NB-IoT芯片厂商的资料说明
- 0.31 MB | 22次下载 | 1 积分
- 4H110主板CPU PWM芯片ISL95858HRZ-T核心供电电路图资料
- 0.63 MB | 6次下载 | 1 积分
- 5UWB653Pro USB口测距通信定位模块规格书
- 838.47 KB | 5次下载 | 免费
- 6技嘉H110主板IT8628E_BX IO电路图资料
- 2.61 MB | 4次下载 | 1 积分
- 7苏泊尔DCL6907(即CHK-S007)单芯片电磁炉原理图资料
- 0.04 MB | 4次下载 | 1 积分
- 8苏泊尔DCL6909(即CHK-S009)单芯片电磁炉原理图资料
- 0.08 MB | 2次下载 | 1 积分
总榜
- 1matlab软件下载入口
- 未知 | 935137次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420064次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233089次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191439次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183353次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81602次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73822次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65991次下载 | 10 积分
电子发烧友App





创作
发文章
发帖
提问
发资料
发视频
上传资料赚积分
评论