运算符、表达式和语句
- 关键字:while、typedef
- 运算符:=、-、*、/、%、++、–、(类型名)
- C语言的各种运算符,包括用于普通数学运算的运算符
- 运算符优先级以及语句、表达式的含义
- while循环
- 复合语句、自动类型转换和强制类型转换
- 如何编写带有参数的函数
运算符优先级(从高至低)
运算符 | 结合律 |
---|---|
() | 从左往右 |
+-(一元) | 从右往左 |
*/ | 从左往右 |
+-(二元) | 从左往右 |
= | 从右往左 |
sizeof运算符和size_t类型
size_t intsize;
intsize = sizeof(int)
typedef double real;
real deal;
real就是double的别名。
不要自作聪明
- 如果一个变量出现在一个函数的多个参数中,不要对该变量使用递增或递减运算符
- 如果一个变量多次出现在一个表达式中,不要对该变量使用递增或递减运算符
表达式和语句
表达式由运算符和运算对象组成。最简单的表达式是一个单独的运算对象,以此为基础可以建立复杂的表达式。
表达式 | 值 |
---|---|
-4+6 | 2 |
c=3+8 | 11 |
5>3 | 1 |
6+(c=3+8) | 17 |
语句是C程序的基本构建块。一条语句相当于一条完整的计算机指令。在C中,大部分语句都以分号结尾。
类型转换
- 当类型转换出现在表达式时,无论是unsigned还是signed的char和short都会被自动转换成int,如有必要会被转换成unsigned int(如果short与int的大小相同,unsigned short就比int大。这种情况下,unsigned short会被转换成unsigned int)。在K&R那时的C中,float会被自动转换成double(目前的C不是这样)。由于都是从较小类型转换为较大类型,所以这些转换被称为升级(promotion)。
- 涉及两种类型的运算,两个值会被分别转换成两种类型的更高级别。
- 类型的级别从高至低依次是long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int、int。例外的情况是,当long和int的大小相同时,unsigned int比long的级别高。之所以short和char类型没有列出,是因为它们已经被升级到int或unsigned int。
- 在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。这个过程可能导致类型升级或降级(demotion)。所谓降级,是指把一种类型转换成更低级别的类型。
- 当作为函数参数传递时,char和short被转换成int,float被转换成double。函数原型会覆盖自动升级。
类型升级通常都不会有什么问题,但是类型降级会导致真正的麻烦。原因很简单:较低类型可能放不下整个数字。例如,一个8位的char类型变量储存整数101没问题,但是存不下22334。
如果待转换的值与目标类型不匹配怎么办?这取决于转换涉及的类型。待赋值的值与目标类型不匹配时,规则如下。
- 目标类型是无符号整型,且待赋的值是整数时,额外的位将被忽略。例如,如果目标类型是8位unsigned char,待赋的值是原始值求模256
- 如果目标类型是一个有符号整型,且待赋的值是整数,结果因实现而异。3.如果目标类型是一个整型,且待赋的值是浮点数,该行为是未定义的。
带参数的函数
上一页 C Primer Plus阅读学习(三)
下一页 C Primer Plus阅读学习(五)