C Primer Plus(五)

第五章运算符、表达式和语句

5.1运算符

C使用运算符来表达算术运算。每个运算符的特性包括所需操作数的数量、优先级和结合性。当两个运算符共享一个操作数时,最后两个特性决定了先应用哪一个运算符。

5.1.1  赋值运算符: =
例如: bmw=2002; 符号=的左边是一个变量名,右边是赋给该变量的值。应该读为“将值2002赋给变量bmw”。赋值运算符的动作是从右到左。
不能将一个值赋给一个常量,赋值运算符的左边应该是一个可修改的左值。实际上,左式必须指向一个存储位置。
C90标准将一元+运算符加进了C中,这个运算符不改变它的操作数的值或符号。因此可以使用dozen=+12;
几个术语
数据对象:泛指数据存储区的术语,数据存储区能用于保存值。
左值:标识一个特定的数据对象的名字或表达式。
例如:变量的名字是一个左值。所以对象指的是实际的数据存储,但是左值是用于识别或定位那个存储的标识符。

5.1.2  除法运算符: /

浮点类型的除法运算得出一个浮点数结果,而整数除法运算则产生一个整型结果。整数除法结果中的小数部分都丢弃,这个过程称为截尾。
当您对整数与浮点数进行混合运算时,结果是浮点数。
舍入过程采用小于或等于该浮点数的最大整数。C99要求使用“趋零截尾”,所以应把-3.8转换成-3。

5.1.3  取模运算符: %

%只能用于整数运算。
C99标准:如果第一个操作数为负数,那么得到的模也为负数。

5.1.4  增量和减量运算符: ++和--

++:1.出现在它作用的变量的前面,这是前缀模式。2.出现在它作用的变量的后面,这是后缀模式。
使用它的好处,使程序代码简洁,另一个优点是它通常产生更高效的机器语言代码。
aplus=a++;//先将a的值赋给aplus,a再增加1。
aplus=++a;//先将a增加1,再将a的值赋给aplus。
优先级
增量和减量运算符有很高的结合优先级,只有圆括号比它们的优先级高。
几个注意事项
如果一个变量出现在同一个函数的多个参数中时,不要将增量或者减量运算符用于它上面。
当一个变量多次出现在同一个表达式里时,不要将增量或者减量运算符用于它上面。

5.2表达式和语句

5.2.1  表达式和语句

表达式是由运算符和操作数组合构成的,每一个C表达式都有一个值。
语句是构造程序的基本成分,程序是由一系列带有某种必需的标点的语句集合。
例如 legs=4是一个表达式 legs=4;是一个语句。
尽管一个语句是一个完整的指令,但不是所有的完整的指令都是语句。
x=6+(y=5);子表达式y=5是一个完整的指令,但是它只是一个语句的一部分。
注意一个声明语句不是一个表达式语句,如果从声明里去掉分号,您所得的不是一个表达式,也不具有一个值。

5.2.2  顺序点

一个顺序点是程序执行中的一点,在改点处,所有的副作用都在进入下一步前被计算。
在C中,语句里的分号标志了一个顺序点。它意味着在一个语句中赋值运算符,增量运算符以及减量运算符所做的全部改变必须在程序进入下一个语句前发生。

5.2.3  复合语句

复合语句是使用花括号组织起来的两个或更多的语句,它也被称为一个代码块。
整个复合语句被认为是一个语句。
缩排对编译器不起作用,但可以为读者指明程序的结构。

5.3类型转换

当出现在表达式里时,有符号和无符号的char和short类型都将自动转换为int。
在K&R C下,float将自动转换为double。
在包含两种数据类型的任何运算里,两个值都被转换为两种类型里较高的级别。
在赋值语句里,计算的最后结构被转换成将要被赋予值的那个变量的类型。
当作为函数的参数传递时,char和short类型将自动转换为int,float将自动转换为double。
提升通常是一个平滑的无损害的过程,但是降级可能导致真正的问题。
例如:当浮点类型降级为整数类型时,它们被趋零截尾或舍入。

指派运算符

步骤:在某个量的前面放置用圆括号起来的被希望转换成的类型名。圆括号和类型名一起构成了指派运算符。

原型是一个函数声明,它描述了函数的返回值和它的参数。

原文地址:https://www.cnblogs.com/tuifeideyouran/p/3106696.html