1. 关键字const并不能把变量变成常量! 在一个符号前加上const限定符只是表示这个符号不能被赋值。也就是它的值对于这个符号来说是只读的,但它并不能防止通过程序的内部(甚至是外部)的方法来修改这个值。const最有用之处就是用它来限定函数的形参。
2. 算术转换。如果其中一个操作数的类型是:unsigned,那么另一个操作数被转换为:unsigned,计算结果的类型也是unsigned。 当执行算数运算时,操作数的类型如果不容,就会发生转换。数据类型一般朝着浮点精度更高,长度更长的方向转换,整形数如果转换为signed不会丢失信息,就转换为:signed,否则就转换为:unsigned。
3. 对无符号类型的建议:
(1) 尽量不要在你的代码中使用无符号类型,以免增加不必要的复杂性。尤其是,不要仅仅因为无符号数不存在负值而用它来表示数量。
(2)只有在使用位段和二进制掩码时,才可以用无符号数。应该在表达式中使用强制类型转换,使操作数均为符号数或者无符号数,这样就不必由编译器来选择结果的类型。
4. switch中,如果没有匹配的,也不会提示:“无匹配”。另一个问题就是:它的内部的任何语句都可以加上标签,并在执行时跳转到那里,这就有可能破坏程序流的结构化。
在c语言中,几乎从来不进行运行时错误检查。
5. printf("abc"
"is abc.");
输出的结果为:abcis abc. 因为它们在编译的时会自动合并。除了最后一个字符串外,其余每个字符串末尾的‘\0’字符会被自动删除。
6. p = N * sizeof *q; 这里是sizeof操作符把指针q指向的东西作为操作数。当sizeof的操作数是个类型名时,两边必须加上括号。但是操作数如果是变量则不必加括号。
7. 有些专家建议牢记两个优先级就够了:乘法和除法高于加法和减法,在涉及其他的操作符时一律加上括号。
8.所有的赋值符(包括复合赋值符)都具有右结合性。
9. 在函数调用中,各个参数的计算顺序是不确定的。
10. ANSI C 规定了最大一口策略。表示如果下一个标记有超过一种的解释方案,编译器将选取能组成最长字符序列的方案。比如:z = x+++y. 编译器翻译成为: z = x++ + y;