电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子教材>《数据结构 C语言 》电子教案免费下载

《数据结构 C语言 》电子教案免费下载

2010-03-01 | rar | 7744 | 次下载 | 免费

资料介绍

《数据结构 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引用。

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1电子电路原理第七版PDF电子教材免费下载
  2. 0.00 MB  |  1490次下载  |  免费
  3. 2单片机典型实例介绍
  4. 18.19 MB  |  92次下载  |  1 积分
  5. 3S7-200PLC编程实例详细资料
  6. 1.17 MB  |  27次下载  |  1 积分
  7. 4笔记本电脑主板的元件识别和讲解说明
  8. 4.28 MB  |  18次下载  |  4 积分
  9. 5开关电源原理及各功能电路详解
  10. 0.38 MB  |  10次下载  |  免费
  11. 6基于AT89C2051/4051单片机编程器的实验
  12. 0.11 MB  |  4次下载  |  免费
  13. 7蓝牙设备在嵌入式领域的广泛应用
  14. 0.63 MB  |  3次下载  |  免费
  15. 89天练会电子电路识图
  16. 5.91 MB  |  3次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234313次下载  |  免费
  3. 2PADS 9.0 2009最新版 -下载
  4. 0.00 MB  |  66304次下载  |  免费
  5. 3protel99下载protel99软件下载(中文版)
  6. 0.00 MB  |  51209次下载  |  免费
  7. 4LabView 8.0 专业版下载 (3CD完整版)
  8. 0.00 MB  |  51043次下载  |  免费
  9. 5555集成电路应用800例(新编版)
  10. 0.00 MB  |  33562次下载  |  免费
  11. 6接口电路图大全
  12. 未知  |  30320次下载  |  免费
  13. 7Multisim 10下载Multisim 10 中文版
  14. 0.00 MB  |  28588次下载  |  免费
  15. 8开关电源设计实例指南
  16. 未知  |  21539次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935053次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537791次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234313次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233045次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191183次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183277次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138039次下载  |  免费