以前曾经看过,但是没有太仔细的看,昨天又看了一下,的确是经典。
第一章 :
c :穿越时空的迷雾
介绍了c的来源,以及ansi c 和 k&R c之间的区别和联系,还有就是在平时生活中我们遇见的两者之间的具体的列子,还有就是编译器的不同实现。
最重要的 区别:原型的形成
原型的目的是当我们对函数作前向声明(forward declaration)时,在形参中增加一些信息(而不仅是函数的返回值的类型和函数名),这样,编译器就能够在编译的时候对函数调用中的实参和形参之间进行一致性检查。而在K&R 中,这个是要被推迟到链接的时候才检查的,或者干脆不作检查
每个实参都应该有自己的类型,这样它的值就可以赋值给与他所对应的形参类型的对象(该对象的类型不能够含有限定符)
举例:.........(p 19)
实参char **s 与形参const char ** p 是否是相容的?(根据原型的相关原理)
const 的最有用之出在于用他来限定函数的形参,这样函数就不能够修改实参指针所指的值,但是其他函数却能够修改他,这也许就是c 和c++ 中const 最一般的用法。
const 和 * 的组合是最通常的用法,用于在数组形式的参数中模拟传值调用。它声称“我给你一个指向它的指针,但是你不能够修改它。”如此种种,结论:如果当初const 关键字命名为readonly 就好办多了。
小启发:
对无符号类型的建议(p24)
阅读(1198) | 评论(1) | 转发(0) |