6.1 要点1:了解内存和变量的关系
计算机所处理的数据都存储在了被称为内存的IC(Integrated Circuit,集成电路)中。在一般的个人计算机中,内存内部被分割成了若干个数据存储单元,每个单元可存储8比特的数据(8比特=1字节)。为了区分各个单元,每个单元都被分配了一个编号,这个编号被称为“地址”(门牌号码)。如果一台个人计算机装配有64M字节内存,那么就会有从0到64M(1M=100万)这么多个地址
因为依靠指定地址的方式编写程序很麻烦,所以在C、Java、BASIC等几乎所有编程语言中,都是使用变量把数据存储在内存中或从内存中把数据读出来。在代码清单6.1中列出了一段用C语言写的程序,用于把数据123存储变量a中,其中用/*和*/的内容是C语言的注释
代码清单6.1 把123存入变量a
char a; /*定义变量*/
a=123; /*把数据存入变量*/
首先看后面的注释有“定义变量”的这一行代码char a,char代表一种C语言的数据类型,该类型可用于存储1字节的整数,通过这一行代码就在内存中预留了一块空间,并为这块空间起了个名字叫a
对于程序员来说,并不需要知道变量a被存储到内存空间中的哪个地址上。因为当程序运行时是由操作系统从尚未使用的内存空间中划分出一部分分配给变量a的。如图6.1所示,变量是程序中数据存储的最小单位,每个变量都对应着一块物理上的内存空间。
图6.1 内存的物理结构以及它与程序的关系
如果是完全不了解数据结构的程序员,说不定会通过一个挨一个地定义出若干个离散的变量来编写程序吧。要是程序可以按预期运行,那么以这种方式编程也可以。但是若还要用这种方式来实现多个数据排序的算法,就有些困难了。
代码清单6.2中列出了一段程序,把三个数据分别存入a,b,c三个变量中,再将a,b,c中的数据的值按降序(从大到小的顺序)排列。在排序时为了交换两个变量的值还需要用到tmp变量,程序使用if语句一对儿一对儿地比较变量的大小,并根据比较的结果交换变量的值
代码清单6.2 把存入的三个变量中的数值按降序排列
/*定义变量*/
char a,b,c,tmp
/*把数据存入变量*/
a=123;
b=124;
c=125;
/*按降序排列*/
if (b>a){
tmp=b;
b=a;
a=tmp;
}
if (c>a){
tmp=c;
c=a;
a=tmp;
}
if (c>b){
tmp=c;
c=b;
b=tmp;
}
虽然代码清单6.2中的程序可正常运行(代码清单6.2给出的只是代码片段,无法直接运行),但是处理的过程(算法)实在是够哆嗦的。如果需要排序的数据有1000个,那么就需要定义1000个变量,用于比较其中数值大小的if语句,更是需要约数十万个程序块。应该没有人想写这么麻烦的程序吧。也就是说,为了实现想要实现的算法,有时不能只依靠离散的变量。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论