《C语言深度解培》读书笔记之二

来源:互联网 发布:淘宝开店卖什么好 编辑:程序博客网 时间:2024/05/23 18:34



C语言的基本符号就有20多个,每个符号可能同时具有多重含义,而且这些符号之间相互结合又使得C语言中的符号变得更加复杂起来。

注释

C语言的注释可以出现在程序的任何地方,这句话对不对?

int/**/n;char *s="abcd //hgjkeife";//is it a \valid commentin/**/t i;

前三条注释都正确,第四条不正确。

第一条:编译器会将注释剔除,而不是简单的剔除,而是用空格来代替原来的注释。不用担心解析成intn

第二条:双绰号括起来的都是字符串常量,双斜杠也不例外。

第三条:合法的注释,编译器会有警告提示:warning C4010: 单行注释包含行继续符

第四条:不合法。注释会用空格进行替换。

y=x/*p;
编译器会把/*当成注释的开始,而不会当成*p。修改成y=x/ *p; 则可

也就是说只要斜杠(/)和星号(*)之前没有空格,都会被当成注释的开始。
注释代码段时应注重“为何做(why)”而不是“怎么做(how)”

接续符和转义符

C语言里以斜杠(\)表示断行。编译器会被反斜杠剔除,跟在反斜杠后面的字符自动接续到前一行。

注意:反斜杠后面不能有空格,反斜杠的下一行之前也不能有空格。

下面是几个特例

/\/这是一条简单的合法的单行注释cha\r *ss="这是一个合法的\\n字符串";#def\ine MAC\RO这是一条合法的\宏定义

反斜杠除了可以被用作接续符,还能被用作转义字符的开始标识。

单引号、双引号

1 ‘1’和“1”

第一个是整型常数,32位系统下占4个字节。

第二个是字符常量,占1个字节。

第三个是字符串常量,占2个字节。

字符在内存里是按ascii码存储的,所以字符常量可以与整型常量或变量进行运算。‘A’+1

逻辑运算符

! &&  ||

位运算符 

C中位运算符包括以下几种:

&按位与

|按位或

^按位异或

~取反

<<左移

>>右移

注意:逻辑运算符&&  ||  和位运算符 & | 的区别,不要混淆。

其中按位异或可实现不用第三个临时变量交换两个变量的值。

a^=b;b^=a;a^=b;

左移运算符<<:双目运算符。其功能把“<<”左边的运算数的各个二进制位全部向左移动若干位,由“<<”右边的数指定移动的位数。高位丢弃,低位补0.

右移运算符>>:双目运算符。其功能是把“>>”左边的运算数的各个二进制位全部向右移动若干位,由“>>”右边的数指定移动的位数。但注意:对于有符号数,在向右移时,符号位随同移动,当为正数时,最高位补0,当为负数时,符号位为1,最高位是补0还是补1取决于编译系统的规定。

用最有效率的方法算出2*8=?

0x01<<2+3  ;

结果是32.因为“+”号的优先级高,

改成 0x01<<2+30;  或  0x01<<2-3;

这样行嘛,不行。一个整型长度为32位,左移32会造成溢出,左移-1位?也不行。

左移和右移的位数是有讲究的,左移和右移的位数不能大于数据的长度,不能小于0.

花括号 

花括号为了把一些语句或代码打个包包起来,使之形成一个整体,并与外界绝缘。

++、--操作符

后缀运算符在本计算单位计算结束后再自加或自减。

h=(i++,i++,i++);       //在遇到逗号时才自加。   h=2,i=3

h=(i++)+(i++)+(i++);   //在遇到分号时才自加。   h=0,i=3

贪心法

运算符的优先级




这些容易出错的情况,一定要在编译器上多调试调试,这样印象会深一些,光靠看代码,水平是很难提上来的,调试代码是最长水平的。