c专家编程读书笔记:第二章c语言特性

这本书真的很好,解决了很多一知半解的问题。从今天起,我分享我以前做的读书笔记。

1、在C语言中,几乎从来不进行运行时错误信息——对进行解除引用操作的指针进行有效性检查大概是唯一的例外。

2、一个L的NUL用于结束一个ACSII字符串。

两个L的NULL用于表示什么也不指向(空指针)。

3、const不是真的常量

4、case语句的fall through:就是如果后面不加break,就依次执行下去,而不管后面的case满不满足条件要求。

由于存在fall through, switch语句可能会有麻烦,不加break,会导致找到对应的标签后,后面的case都执行。

在c中,利用fall through特性的代码97%都是错误的。如果真的需要使用,需要用特殊的注释/*fall through*/告诉lint。

注意,switch中的break是跳出switch语句块,而不是跳出if块。参考AT&T的历史上的第一次重大网络故障。

5、c语言函数默认是全局函数,默认是extern,不是static。interpositioning就是用户编写和库函数同名的函数并取而代之的行为。c语言要么全局可见,要么只有一个文件内可见。all-or-nothing。

6、c语言的符号重载:

7、sizeof是个操作符,不是函数。

8、有些专家建议在c语言中记住两个优先级就够了:乘法和除法先于加法和减法,在涉及其他的操作符时一律加上括号。(这样真的不会错)

9、结合性是指在操作符的优先级一样的情况下决定哪个操作先执行。

10、向函数外传递数组的五种方式:

返回一个指向字符串常量的指针。只适用于字符串常量

使用全局声明的数组。缺点是浪费内存空间。

使用静态数组。缺点是覆盖以前的内容。

在函数中显式分配一些内存。浪费内存空间。

(正确)调用者分配内存来保存函数的返回值。为了提高安全性,调用者应该同时指定缓冲区的大小。在同一块分配和销毁内存。

1