哈喽!我是甜筒科技【Aice】的大虫,首先先简单的谈谈本人对这本书的一些看法吧,刚刚从图书馆看到这本书的时候就感觉和其他书不一样,除了厚以外,简介的封面设计也吸引到了我。ps:为什么说感觉和其他书不一样呢,其实是有原因的,因为周围的书全是c语言程序设计,换汤不换药。但是这本书后面加了一个现代方法。哈哈,可能是笔者的一点点小偏见吧,但是确实是他的封面,厚度和这句话紧紧的吸引住了我的眼球。废话就不多说了,现在就开始感受它能带给我哪些绝学吧!
这本书是美国译过来的,首先我应该感谢翻译这本书的吕秀锋和黄倩两位老师,我觉得称呼为老师也是应该的吧,习惯这样叫了哈哈。就我自己而言,英语简直是渣的一塌糊涂,人们经常说扶不起的阿斗,这样比起来,自我觉得我连阿斗都不如。可能是不够勤奋再加上天生对语言愚钝的缘故吧,所以英语一直是我的硬伤。希望看了我的读书笔记的童鞋们不要像我,毕竟多一门技能总是好的。
这本书总共有27个章节,和普通的其他计算机语言书籍一样,作者用了13章的文笔来介绍c语言的一些基础知识(ps:在笔者看来是这样的,因为之前看过的程序设计书籍都是这些内容,而后面的一些章节讲解的知识基本上没有看到,或者是一笔带过。所以暂且这样划分吧,希望各位大神不要吐槽,毕竟我也只是个刚刚修炼各种语言的渣渣),后面,也就是从14章过后就是介绍一些对于我来说还掌握不是很透彻的知识。那么现在我开始记录1-13章的读书笔记,统一称作基础部分,主要是查漏补缺的目的,让我在了解的基础上能更加深入的了解。
第一章:c语言概述,这一章主要讲的就是一些关于c语言是怎么来的呀,c语言有什么优缺点呀,如何高效的使用c呀巴拉巴拉的东西。在这里就不累述了,如果想认真看这本书,笔者还是挺推荐的。
第二章:c语言基本概念,在我印象里面,几乎所有的c语言程序设计数据,也包括其他的计算机语言书籍,基本上第一个程序都是:“hello world”,也是这个程序带领我们进入了c语言的奇妙世界。但是在这里值得注意的是,我在这本书上面居然知道这个程序是一个很有名气的程序,同时还有作者,他们是:Kernighan和Ritchie两位大神,好吧其实我也不太清楚这两位大神的伟大事迹,但是先记下吧由于现在任务实在是繁重,再加上回家后没有网络让我去进一步了解更对,只能先记有时间再去了解。然后这本书把一个c语言程序的实现过程讲了一下,在这里我也说说:一个c语言程序想要运行是还需要进一步处理的,也就是编译和链接,编译的作用是把我们写好的程序编译成计算机认识的机器指令(0100101这种,最近也在看一些汇编数据,有所了解。对了,是记得没错的情况下$笑哭$,我的记心不太好),要知道我们现在学的这本书是c语言,一种高级语言,计算机无法识别。编译完成之后便是链接,这一步也是最后一步,顺便说说在这个过程中分成了三个必须的步骤即:预处理、编译和链接。链接指的是利用链接器把编译器编译的目标代码和和其他所需的附加代码整合在一起,这些附加代码包括程序中提到的库函数。这样,一个可以运行的c程序就完成了。
接下来,作者又详解了简单程序的一般形式,包括:指令,函数,语句和显示字符串。值得注意的是,接下来作者居然还详细的讲解了注释方法,ps:真是一个细心的作者。变量和赋值,读入输入定义常量,标识符和程序的规范书写。这些东西都有在其他数据看过,但是不得不承认这位作者是一个细心的人。对了这里我想还想记录的是标识符,这个知识点对我来说还比较陌生,标识符…………,这样吧,我直接把书上的原文摘抄下来,以后我忘了也好及时复习,哈哈:在编写程序时,需要对变量,函数,宏和其他实体进行命名。这些名字成为标识符(identifier)。在C语言中,标识符可以含有字母,数字和下划线,但必须以字母或者下划线开头。例如:times10 get_next_char _done 这样是合法的。如果这样:10times get-next-char 这样是不合法的,因为符号10times 是以数字开头的,符号get-net-char 包含了减号,而不是下划线。下划线具体的使用方法和用处请详细的寻找资料,这里就不累述了。
第三章:格式化输入/输出,这一章讲的就是两个标准函数,一个是printf,另一个是scanf。书中详细的介绍了这两个函数的用法和相应的注意事项。
第四章:表达式,什么是表达式呢,在数学上我们称一个能实现某种运算解决某种问题的数学式子称为表达式。才C语言中,表达式的意义也是差不多,那么首先需要了解的就是算术运算符啦,因为它是构成表达式的基本单元之一。然后就是算术运算符的优先级和结合性,这里讲了每一种算术运算符中优先级数,需要注意的是不止是算术运算符具有优先级,其他的运算符也同样具有优先级,比如非运算“!”的优先级是2,*和/的优先级是3等。接下来介绍了一些运算方法,比如符合运算(i=i+3),自增运算和自减运算等。
第五章:选择语句,说到c语言中的选择语句,让我第一个想到的便是if-else语句,在我印象里面也是我第一个了解的c语言语句,记得还是在高中数学书上得知的,然后便是switch语句。这一章中除了介绍了这两种选择语句之外,还详细的介绍了其他相关的表达式,比如逻辑表达式,逻辑表达式又可以分为关系运算符和判断运算符,关系运算符包括:<,>,<=,>=分别表示了数学上的小于,大于,小于等于和大于等于。值得注意的是关系运算符的优先级低于算术运算符。判断运算符包括==和!=两种,一般用在if,while等表达式中做判断用。逻辑表达式包括逻辑与,逻辑或和逻辑非,分别用符号:&&,||,!。注意:逻辑运算产生的结果只有0和1,逻辑运算符将任何非零操作数作为真挚来处理,同时将任何零值操作数作为假值来处理。这里,作者提到了“短路”运算符,那什么是“短路”运算符呢?运算符||和&&都是对操作数进行“短路”运算,这些运算符先计算出左操作数的值,再计算出右操作数值;如果操作数的值可由左操作数的值直接推出,那么将不计算右操作数的值。比如:(i!=0)&&(j/i>0),如果i不等于0,则计算右边括号的值,再进行判断,如果i等于0,则表达式直接为假。
第六章:循环,当然,当谈起c语言中的循环时,和前面一章类似的让我第一个想到的便是while啦,这一章中,作者按照介绍循环和退出循环的方式来进行讲解。首先说到循环,循环语句包括while语句,do-while语句和for语句,while语句和do-while语句的区别在于,while语句是先判断是否满足条件才执行所包含的语句,而do-while语句则是先执行所包含的语句再判断是否满足条件,看似一个很简单的区别,但是在一些程序中却能出现天壤之别的结果。for语句中值得注意的是逗号表达式,逗号表达式简单的说就是把在for语句以外的初始化语句包含到for语句之内来,看下面的例子:
sum = 0;
for(i=0;i<=N;i++)
sum += i ;
等同于:
for(sum = 0 ,i = 0 ;i<=N;i++)
sum +=i;
退出循环,循环语句包括break语句,continue语句和goto语句,break语句是跳出循环,continue语句是跳转到循环之内的其他地方,goto语句是跳转到指定的地方。
第七章:基本类型,这一章讲的是数据类型,数据类型包括整型类型,浮点类型,字符类型和算术类型。整型类型包括int整型,长整型long int 短整型short int 等,浮点类型包括单精度浮点型:float,双精度浮点型:double和扩展精度浮点数:long double。字符类型的唯一基本类型是char类型,算术类型包括整数类型和浮点类型。字符类型中的转义序列又包括字符转义序列和数字转移序列,如:\a表示警报符,\b 表示回退符,\f 表示换页符,\n表示换行符等都是转义序列。sizeof运算符,这个运算符之前我是没有接触过的,也可能接触过但是忘了,总之现在要重新了解一下,sizeof运算符的表达式是:sizeof(类型名),简单的来说sizeof运算符就是把括号内指定的数据类型转换成相应的该类型所占据的空间大小的具体数字,如在32位的操作机上,sizeof(int)这个表达式结果通常是4,sizeof应该算是一个特殊的运算符,因为编译器本身就可以确定sizeof表达式的值。sizeof也可以这样来用,例如:int i=20;i=sizeof(i); 通过sizeof运算符后i的值为4。同理sizeof(i+j)的值也为4。
第八章:数组,这一章是我比较陌生的,也可以说是我平时使用的不是很频繁,所以感觉上比较陌生,数组可以分为一维数组,二维数组,多为数组和常量数组,数组是含有多个数据值 的数据结构,并且每个数据值具有相同的数据类型。要说的是巧妙地利用上一章所介绍的sizeof运算符可以确定数组的大小(字节数)。如:定义int a[10];并且已经初始化,那个sizeof(a);的结果通常为40。这样便可以巧妙地推断出数组a的大小啦。
第九章:函数,在之前已经说过,C语言中的函数就是一个自带声明和语句的小程序,简单地说C语言中的函数就是为了便于阅读或者其他的目的把一些为了实现某一目的的同类程序用函数来打包,来实现相应的功能。
第十章:程序结构,前面一章中提到了函数,一个程序中只有一个函数很好好解决的问题,但是一般情况下一个程序中不止存在一个函数这么简单。如果一个程序中存在多个函数那么它们的变量作用域和一些其他的问题该如何解决?这个问题在这一章中便得到了很好的详细解释。作者把本章分成了局部变量,外部变量,程序块,作用域和构建C程序五个部分。局部变量和外部变量的区别在于变量在声明时所在的位置,假如变量在声明时处在某个函数的内部,那么这个函数的作用范围只能是这个函数体之内,如果它被声明在函数体以外,那么它便成为了外部变量。外部变量还可以变成全局变量,外部变量的作用范围比局部变量的作用范围要广。程序块可以看作一些程序语句的结合,其实函数体便可以看作一个程序块。
第十一章:指针,指针对于我来说也是一个非常复杂的问题,一时半晌很难解释的清楚,在基础篇我打算把指针单独分开待日后再做详细的说明与解释。同时第十二章中的指针与数组也会同时做单独的介绍。
第十三章:字符串,字符串和字符有所不同的是字符串是一个字符的结合,为了使字符串操作更为简单,c语言把它独立出来了,把字符串,数组和指针联立起来是解决字符串问题的有力办法,同时还可以使用c语言的字符串库来处理字符串。
到这里,C语言程序设计现代方法基础部分便简单的草略的落笔了,或许大家还没搞清楚我在说些什么,哈哈我也觉得我讲的很摸棱两可,毕竟是自己写的读书笔记,只是一时兴起才分享了出来,同时需要强调的是我也是一个程序渣,对很多地方了解的也不是很透侧,在这里只能做抛砖引玉吧,这也是我第一次写读书笔记,应该只能算是随笔吧。同时我也在不断努力,争取成为自己心目中的那个大神,嘻嘻。同时希望结交到更多拥有相同志向兴趣的童鞋,最后打个广告吧,其实这本书真的很不错噢,哈哈。下节讲解:第十四章:预处理器。【非专业性知识总结,如遇到不同于其他文章的地方请认真分析或联系大虫】