不太苟同大多数人认为很多程序员没有几个学C学的好的,那就多看看这本书。
本人只是作为读书笔记来写。有时候会附带一些题目和解答。
开通此类专栏,既为敲砖引玉,也为自勉,望鼓励!
第一章:快速上手
我每次都是复习的来写。我想是这一章,哪怕是上手也需要有一定的C基础。
总结:提出了stdio.h中一些基本的函数,如scanf(),printf(),getchar(),putchar(),gets(),puts()等io函数。
关于NULL和NUL的区别也说了一些。
NUL也就是字符串中的截尾字符‘\n‘,并不存在与预处理中。
NULL是stdio中定义好的字符,表示指针为空,为整型0。
EOF也是stdio种定义好的字符,表示为指针指向文档的结尾。
警告:
1、在scanf函数的标量参数前并未添加&字符。
首先是标量参数,举个例子,数组元素参数是标量参数。它通过值传递来通过main和函数间传递。
&符号在这里是寻址。如果是数组参数,它本身是个地址,所以就不需要做寻址运算了。
2、机械地把printf函数的格式代码照搬于scanf函数。
3、在应该使用&&操作符的地方误用了&操作符。
一个是逻辑操作符,一个是寻址。一般细心都可以避免这个问题。
4、误用=操作符而不是==操作符来测试相等性。
同上,不过这个问题好像犯错的人更多一些。
尤其是在if、while判断中经常出现。
如:while(pointer==EOP)
编程提示:
1、使用#include指令避免重复声明。同时在#include 里面放置函数的原型。
2、使用#define 指令给常量命名。
3、使用数组下标前先检查他们的值。
如:ch = getchar();
while(ch != EOF && ch != ‘\n‘)
ch = getchar();
这是个好习惯。
4、在while/if表达式中蕴含赋值操作。
如:
ch = getchar();
while(ch != EOF && ch != ‘\n‘)
ch = getchar();
就可以写成:
while((ch = getchar()) != EOF && ch != ‘\n‘)
;
这样,就可以消除冗余语句。你可以理直气壮地声称这种可读性非常差的代码技巧应该避免使用。我也可以理直气壮地告诉你,这是因为你对C不是很熟。
大牛们在读代码的时候根本不会出现任何问题。
5、如何编写一个空循环体。
while((ch = getchar()) != EOF && ch != ‘\n‘)
;
这个分号是非常重要的,否则下一句不相关的语句就会被拖入while循环。
6、如何进行检查,确保数组不越界。
比如在存数组中,必需包括以下:
1、如果输入行结束或者输入行数组已满,跳出循环break;
2、如果输出行数据空间不够,只赋值可以容纳的数据;
C和指针 (pointers on C)——第一章:快速上手