C知识回顾(《C程序设计语言 The C Programming Language》)

一、导言

1.单引号中的字符表示一个整形值,我们称为字符常量。例如,'\n'是单个字符,"\n"是只包含一个字符的字符串常量。

2.打印一个反斜杠 \ :printf("\\");打印两个反斜杠 \\ :printf("\\\\")。

3.运算符&&(逻辑与)仅比||(逻辑或)高一个优先级,由&&或||连接的表达式由左至右求值,并且求值过程中只要能确定最终结果为真或者假,就立即停止运算,当判断条件有先后顺序时要特别注意。

4.main函数返回 0 表示正常终止,返回值非 0 表示出现异常状况或者表示出错条件。

5。出现在main函数之前的函数声明语句叫函数原型,表明函数的参数类型和返回值类型;子函数块的第一句叫函数声明,表明参数的类型、名字和返回值类型。函数原型和函数声明中的参数名可以不一样,函数原型中的参数名是可选的,但一般会写出参数名

6.被调用函数不能修改主函数中变量的值,只能修改通过参数传递过来的被调用函数私有的变量临时副本的值。要想修改主函数中变量的值,可以将变量的地址——指向变量的指针作为参数传递。当把数组名作为参数传递时,传递的是数组起始元素的地址,而不是复制数组,可以在被调用函数中通过数组下标访问或者修改数组元素的值。

7.定义(define)是创建变量或者分配存储单元,声明(declaration)是说明变量的性质,并不分配存储单元。


二、类型、运算符与表达式

1.例程的名字通常以下划线开头,所以变量名一般不要以下划线开头。

2.各个变量类型的长度和范围根据机器和编译器的不同会有所区别。一般char 是1个字节8位,unsigned char 范围是0~255,signed char 是-128 ~ 127,char的范围则根据编译器不同而不同。short是2个字节16位,long是4个字节32位,int 或者16位或者32位 根据编译器不同而不同。float是4个字节32位,double 和 long double 一般8个字节64位或更多。

3.long类型的常量以 l 或者 L 结尾,如123456789L。unsigned 类型以 u 或者 U 结尾。

4.'\0'表示数值为0的字符,也就是空字符null。

5.常量表达式在编译时求值,而不是在运行时求值。

6.标准库函数strlen(s)可以返回字符串参数s的长度,但长度不包括'\0'在内。

7.字符串是一个字符数组;枚举是一个整型常量值的列表,当没有说明时,第一个枚举名的值为0,第二个枚举名的值为1,当只指出部分枚举的值时,未指定值的枚举名的值依最后一个指定的枚举名的值一次递增。

8.枚举相比define的优势在于自动生成常量值。

9.默认情况下外部变量和静态变量的值将被初始化为0,而未经初始化的自动变量的值为无效值或未定义值。

10.用 const 限定符声明的变量或者数组的值不能被修改。

11.由于不同机器上char类型变量是unsigned无符号变量还是signed有符号变量不同,因此如果要在char类型变量中存储非字符数据,最好指定限定符unsigned或signed。

12.自动类型转换时,一般由低级(小范围)向高级(大范围)转换,但float不会向double转换。数学函数(math.h)使用双精度浮点数。

13.赋值时也要进行类型转换,赋值运算符右边的值需要转换成左边变量的类型,赋值表达式结果的类型与左边变量的类型相同。

14.自动类型转换时,无论是否进行符号扩展,char型变量都会被转换为int型变量;short型变量也会转换为int型变量;当把较长的整数转换为较短的整数或者char型变量时,超出的高位部分会被丢弃。

15.C语言中提供的6个位操作运算符——按位与、或、异或、取反以及左移、右移——只能用于整型数(包括char、short、int、long)。

16.移位操作运算符<<和>>分别将运算符的左操作数左移或者右移由右操作数指定的位数(不能为负)。其中,左移时由 0 补低位空位,右移时无符号数unsigned由 0 补高位空位,有符号数signed根据机器不同补符号位(算术右移)或者补0(逻辑右移)。

17.int 默认是有符号的,即signed int。

18.赋值运算符(如 +=)只进行一次计算,先运算再赋值进行两次计算,因此赋值运算符有助于编译器产生高效的代码。赋值表达式的类型是左操作数的类型,值是赋值操作完成后的值。

19.a ? b : c 条件表达式实际也是一种表达式,比if -else语句更加简洁,表达式结果的类型由表达式类型转换规则决定,问号前的式子最好加括号,但不是必须的,加上更易于阅读。

20.C语言中没有指定同一运算符的多个操作数或者某函数各个参数的求值顺序,如果代码的执行结果和求值顺序有关,都是不好的程序设计风格。


三、流控制

1.switch-case语句用于测试表达式是否与一组常量整数值中的某个值匹配,并从对应分支开始执行语句,执行完该分支后继续执行下一分支。要在某分支后结束语句,一般在case语句中配合break语句或者return语句使用。

2.作为一种良好的程序设计风格,一般在switch-case语句的最后一个分支(即default分支)的后面也加一个break语句,这样做可以防止以后再向该switch语句添加其他分支时发生错误。


四、函数与程序结构

1.函数的声明与定义必须一致,如果不一致,会出现错误。如果程序中没有显示的函数声明(函数原型),函数将在这个函数第一次出现的时候被隐式声明。默认函数的返回值为int型,对参数的类型不做假设,此时如果调用程序将被调用函数的返回值按其他类型处理,就会发生错误。

2.如果函数有参数,则在函数声明中要对它们进行声明,如果没有参数,则用void声明,不能空着参数不写。

3.如果函数的返回值的类型与函数中return语句表达式的类型不一致,表达式的值会被自动转换成函数的返回值类型,但是这样可能会丢失某些信息,并且编译器会发出警告信息,这是应该采用显示的类型转换方法:return (返回值类型) 表达式 ;

4.如果两个函数要共享很多数据,而这两个函数互不调用对方,最方便的方法就是将这些数据定义为外部变量,而不是用函数参数来传递。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值