C Primer plus 第五版.pdf

上传:pangke95642 浏览: 19 推荐: 0 文件:PDF 大小:6.1MB 上传时间:2020-07-29 03:38:30 版权申诉
系统详细的介绍了C语言的结构体系,适合于入门以及开发用。文件中的几项内容即可。多数语言原本都想具有可移植性,但任何曾将 IBM PC BASIC程序转换为 Apple baSIC程序(它们还是近亲)的人,或者试图在UNX系统上运行一个IBM大型机FORTRAN程序的人都知道,移植至少是在制造麻烦。C在可栘植性方面处于领先地位。C编译器(将C代码转换为计算机內部使用的指令的程序)在大约40多种系统上可用,包括从使用8位微处理器的计算机到cray超级计算机。不过要知道,程序中为访问特定硬件设备(例如显示器)或操作系统(如 Windows xp或OSⅩ)的特殊功能而专门编写的部分,通常是不能移植的。由于C与UNⅨX的紧密联系,UNⅨX系统通常都带有一个C编译器作为程序包的一部分。 Linux中同样也包括一个C编译器。个人计算机,包括运行不同版本的 Windows和 Macintosh的PC,可使用若干种C编译器。所以不论你使用的是家用计算机,专业工作站还是大型机,都很容易得到针对你特定系统的C编译器1.2.4强大的功能和灵活性C强大而又灵活(计算机世界中经常使用的两个词)。例如,强大而灵活的UNIX操作系统的大部分便是用C编写的。其他语言(如 FORTRAN,Perl, Python, Pascal,LIsP,Logo和 BASIC)的许多编译器和解释器也都用C编写的。结果是,当你在一台∪NⅸX机器上使用 FORTRAN时,最终是由一个C程序负责生成最后的可执行程序的C程序已经用于解决物理学和工程学问题,甚至用来为《角斗士》这样的电影制造特殊效果。1.2.5面向编程人员C面向编程人员的需要。它允许你访问硬件,并可以操纵內存中的特定位。它具有丰富的运算符供选择,让你能够简洁地表达自己的意图。在限制你所能做的事情方面,C不如 Pascal这样的语言严格。这种灵活性是优点,同时也是一种危险。优点在于:许多任务(如转换数据形式)在C中都简单得多。危险在于∶使用C时,你可能会犯在使用其他一些语言时不可能犯的错误。C给予你更多的自由,但同时也让你承担更大的风险。另外,多数C实现都有一个大型的库,其中包含有用的C函数。这些函数能够处理编程人员通常会面对的许多需求。1,2.6C确实有一些缺点。和人一样,缺点和优点往往是同一特征相对的两个方面。例如,我们前面曾说过,C在表达方面的自由会增加风险,尤其是C对指针(在本书后面部分将学到)的使用,意味着你可能会犯非常难以追踪的编程错误。正如以前一位计算机专家曾经指出的,自由的代价是永远的警惕C的简洁性与其丰富的运算符相结合,使其可能会编写岀极难理解的代码。没有谯强迫你编写含糊难懂的代码,但存在这样的可能性。试问,除C之外还有哪种语言存在一年一度的“含糊代码”( Obfuscated code)竞赛呢?此外,C还有许多的优点,但亳无疑问,C还有一些缺点。我们不想在这一点上多费笔墨,还是换一个新的话题吧13C语言的发展方向20世纪80年代初,C在UNⅨ系统的小型机世界中已经是主导语言了,从那时开始,它已经扩展到个人计算机(微型机)和大型机(庞然大物),许多软件开发商都首选C语言来开发其子处理程序,电子表格软件,编译器和其他产品。这些公司知道,C可以产生紧凑而高效的程序。更重要的是,他们知道这些程序易于修改而且易于适应新的计算机模式。对于公司和熟悉C语言的人有益的东西,对其他用户同样有益。越来越多的计算机用户已转身使用C以便利用其优点。不一定非得是计算机专业人员才能使用C在20世纪90年代,许多软件开发商开始转身使用C++语言来进行大的编程项目C+向C语言嫁接了面向对象编程工具(面向对象编程是一种哲学思想,它试图让语言来适应问题,而不是让问题来适应语言)。C++差不多是C的一个超集,意味着任何C程序都同时是,或差不多是一个有效的C++程序。通过学习C,你还会学习到C++的许多知识。不管C++和Java这样较新的语言如何流行,C在软件产业中仍然是一种重要的技能,在最想获得的技能中,它一般都列在前10名。特别是在嵌入式系统的编程中,C已经开始流行。也就是说,它将用来为汽车,照相机,DνD播放器和其他现代化设备中逐渐普及的微处理器编程。同样,C已开始进入长期以来一直属于 FORTRAN的科学编程领域。最后,由于它是一种适合用来开发操作系统的语言,C在LinuⅨx的开发中也扮演着重要的角色。因此,在21世纪的前10年中,C仍将保持强劲的势头。简言之,C是最重要的编程语言之一,并将继续如此,如果你想找一份编写软件的工作,则首先你应该能够回答“是”的一个问题就是:“请问,你会使用C吗?1.4计算机工作的基本原理既然打算学习如何用C编程,你就应了解计算机工作原理方面的-些知识。这些知识会帮助你理解用C编写程序与运行该程序时最终会发生的事情之间的联系。现代计算机可分为几个部件。中央处理单元(或称CPU)担负着绝大部分的计算工作随机访问存储器(或称RAM)作为一个工作区来保存程序和文件;永久存储器,一般是硬盘,即使在计算机关机时也能记下程序和文件;还有各种外围设备(如键盘,鼠标和监视器)用来提供人与计算机之间的通信。CPU负责处理程序,所以我们集中来讨论它的功能。CPU的工作非常简单,至少在我们所做的这一简短的描述中是这样的。它从内存中获取一个指令并执行该指令,然后从内存中获取下一个指令并执行,。一个千兆CP可以在一秒种内进行大约_亿次这样的操作,所以CPU能以惊人的速度来从事其枯燥的工作。CPU有自己的小工作区,该工作区由若干个寄存器( registers)组成,每个寄存器可以保存一个数。一个寄存器保存下一条指令的内存地址,CPU使用该信息获取下一条指令。获取一条指令后,C門U在另一个寄存器中保存该指令并将第一个寄存器的值更新为下一条指令的地址。CPU只能理解有限的指令(指令集)。还有,这些指令是相当具体的,其中许多指令要求计算机将一个数从一个位置移动到另一个位置,例如,从内存单元移到寄存器。这段说明有两个有趣的地方。首先,存储在计算机中的一切内容都是数字。数字是以数字形式存储的,字符(如文本文档中使用的字母字符)也是以数字形式存储的,每个字符有一个数字代码。计算机装载到寄存器的指令是以数字形式存储的,指令集中的每条指令具有一个数字代码。其次,计算机程序最终必须以这种数字指令代码(或称为机器语言)来表示。明白了计算机运行方式的一个结果就是∶如果你希望计算机做某件事,就必须提供个特定的指令列表(一套程序)确切地告诉计算机要做的事及如何去做。你必须以种计算机可以直接理解的语言(机器语言)来创建该程序。这是一项繁琐,乏味,费力的任务。即使将两个想回这样简单的事也必须被分解成若干个步骤1将内存单元为2000中的数字复制到寄存器12将内存单元为2004中的数字复制到寄存器2.3将寄存器2的内容加到寄存器1的内容,答案保留在寄存器1中。4将寄存器1的内容复制到内存单元2008而且你必须用数字代码来表示这些指令中的每一个!如果你喜欢以这种方式编写程序,那么很不幸,你将会发现机器语言编程的黄金时期已经过去很久了但如果你喜欢更有乐趣的事,则请向高级编程译文敞开你的心扉。1.5高级计算机语言和编译器如C这样的高级编程语言,可以从几个方面简化你的编程过程。首先,你不必用数字代码表示指令。其次,你所使用的指令更接近你考虑问题的方式,而非接近计算机使用的详细操作步骤。现在你不用再考恵特定C門U实现特定仼务所必须采取的精确步骤,而是可以在更抽象的层次上表达你的意图。例如,要对两个数求和,你可以编写下列内容total mine + yours看到这样的代码,你就会清楚地知道它的作用。但如果看到用数字代码表示的由若干条指令组成的机器语言等价代码,则不会让人这么明白。不幸的是,对计算机来说正好相反。对计算机来说,高级指令是不能理解的胡言乱语。而这正是出现编译器的原因。编译器是将高级语言程序解释成计算机所需的详细机器语言指令集的程序。你进行髙级思考,编译顺则负责乏味的琐碎工作。采用编译器还有另一个好处。一般来说,每种计算机在设计上都有其自身特有的机器语言。所以用机器语言为一个InIntel pentium cpu编写的程序对 Motorola powerPc cpu来说什么都不是。但你可以将编译器匹配—种特定的机器语言。这样,使用正确的编译器或编译器集,你就可以将同一高级语言程序转换为各种不同的机器语言程序。你解决一个编程问题只须一次然后可以让编译器将该解决方案解释为各种机器语言。简言之,高级语言(如C,Java和 Pascal)都以更抽象的方式描述动作,并且没有与特定的CPu或指令集相关联。同样,高级语言更易于学习,而且用高级语言编写程序比用机器语言容易得多。
上传资源
用户评论