资料介绍
转变二、 声明位置的转变
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语言版)教材下载 0次下载
- 数据结构C语言版电子书免费下载 0次下载
- 数据结构C语言版PDF电子书免费下载 0次下载
- 数据结构是什么?数据结构C语言版教材免费下载 0次下载
- 什么是数据结构?为什么要学习数据结构?数据结构的应用实例分析 14次下载
- 为什么要学习数据结构?数据结构的应用详细资料概述免费下载 13次下载
- 《数据结构C语言版》(严蔚敏吴伟民版)电子教材免费下载 0次下载
- 数据结构与算法分析的C语言描述的电子教材详细资料免费下载 0次下载
- 30G最全最新小甲鱼视频教程汇编语言c语言c++DELPHI数据结构Python资料下载 56次下载
- 数据结构(C语言版) 0次下载
- 数据结构与算法分析:C语言描述(原书第2版) 0次下载
- 数据结构与算法分析(C语言版) 0次下载
- 数据结构(C#语言版) 0次下载
- 数据结构教程,下载 0次下载
- C语言数据结构之跳表详解 479次阅读
- 不同数据结构的定义代码 302次阅读
- 嵌入式软件常见的8种数据结构 592次阅读
- 跳跃表数据结构与算法分析 558次阅读
- SystemVerilog中可以嵌套的数据结构 1177次阅读
- Trie树数据结构的实现原理和题目实践 1475次阅读
- 什么是数据结构 数据及数据之间的关系分析 6977次阅读
- 这些程序员必须知道的数据结构你知道多少 2110次阅读
- 数据结构有哪些知识重点 2197次阅读
- java常见数据结构面试 9670次阅读
- 区块链的基本数据结构解析 7187次阅读
- 介绍pandas的两种数据结构 5245次阅读
- java中几种常用数据结构 1.4w次阅读
- 数据结构常见的八大排序算法 1744次阅读
- java数据结构学习 663次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1490次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 92次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 10次下载 | 免费
- 6基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
- 7蓝牙设备在嵌入式领域的广泛应用
- 0.63 MB | 3次下载 | 免费
- 89天练会电子电路识图
- 5.91 MB | 3次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537791次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233045次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论