基本运算符

  1. 赋值运算符:=

    • =并不意味(数学中的)相等,而是一个赋值运算符。
    • 几个术语:数据对象左值右值运算符

      1. 左值必须是一个变量名,不能给常量赋值,即可修改的左值
      2. 赋值表达式语句的目的是把值存储到内存位置上。用于存储值的数据存储区域统称为数据对象
      3. 左值用于标识特定数据对象的名称或表达式。因此,对象指的是实际的数据存储,而左值是用于标识或定位存储位置的标签。
      4. 右值指的是能赋值给可修改左值的量,且本身不是左值。
  2. 加法运算符:+

    • 加法运算符用于加法运算,使其两侧的值相加。
  3. 加法运算符:-

    • 减法运算符用于减法运算,使其左侧的数减去右侧的数。

    +-都称为二元运算符,即这些运算符需要两个运算对象才能完成操作。

  4. 符号运算符:-+

    • 减号和加号还可以用于标明或改变一个值的代数符号。即正负号,以这种方式使用的正负号被称为一元运算符,一元运算符只有一个运算对象。
  5. 乘法运算符:*

    • 符号*表示乘法。C没有平方函数,可以使用乘法来计算平方。
    • 乘法的应用:指数增长
  6. 乘法运算符:/

    • C使用符号/来表示除法。左侧的值是被除数,右侧的值是除数。
    • 整数除法与浮点数除法不同。浮点数除法的结果是浮点数,而整数除法的结果是整数,在C中整数除法结果的小数部分被丢弃(不会四舍五入),这一过程被称为截断
    • 混合整数和浮点数计算的结果是浮点数。编译器会把两个运算对象转换成相同类型,从较小类型转换为较大类型。
  1. 运算符优先级

    • 如下表(从低至高)
运算符结合律
()从左往右
+ - (一元)从右往左
* /从左往右
+ - (二元)从左往右
=从右往左
  1. 优先级和求值顺序

    • 当运算符共享一个运算对象时,优先级决定了求值顺序。

其他运算符

  1. sizeof运算符和size_t类型

    • sizeof运算符以字节为单位返回运算对象的大小。
    • size_t类型是一个无符号整数类型,但它不是新类型。size_t是语言定义的标准类型,借助C的typedef机制为现有类型创建的别名。
    • sizeof运算符和size_t类型的关系:C语言规定,sizeof返回size_t类型的值。
  2. 求模运算符:%

    • 求模运算符用于整数运算。求模运算符给出其左侧整数除以右侧整数的余数
    • 求模运算符经常用于控制程序流。
    • 负数求模,C99规定“趋零截断”,如果第1个运算对象是负数,那么求模结果就为负数,反之为正数。
  3. 递增运算符:++

    • 递增运算符执行简单的任务,将其运算对象递增1。
    • 该运算符有两种方式:

      1. ++出现在其作用的变量前面,这是前缀模式;返回递增之前的值,然后实际递增该变量。
      2. --出现在其作用的变量后面,这是后缀模式;返回递增之后的值,返回结果之前已经递增该变量。
  4. 递减运算符:--

    • 递减运算符:每种形式的递增运算符都有一个递减运算符与之对应,用--代替++即可。
  5. 优先级

    • 递增运算符和递减运算符都有很高的优先级,只有圆括号的优先级比它们高。
    • 递增运算符和递减运算符只能影响一个变量(即可修改的左值)。

表达式和语句

  1. 表达式

    • 表达式运算符运算对象组成。一些表达式由子表达式(即较小的表达式)组成。
    • 每一个表达式都有一只值
  2. 语句

    • 语句是C程序的基本构建块。一条语句相当于一条完整的计算机指令。在C中大部分语句以分号结尾
    • 副作用序列点

      1. 副作用是对数据对象或文件的修改。赋值操作属于副作用。
      2. 序列点是程序执行的点,在该点上,所有的副作用都在进入下一步之前发生。在C中,语句中的分号标记了一个序列点。
  3. 复合语句(块)

    • 复合语句是用花括号括起来的一条或多条语句,复合语句也称为

类型转换

  1. 基本的类型转换规则如下:

    1. 当类型转换出现在表达式时,都是从较小类型转换为较大类型,所以这些转换也被称为升级
    2. 涉及两种类型的运算,两个值会被分别转换成两种类型的更高级别。
    3. 类型的级别从高至低依次是:long doubledoublefloatunsigned long longlong longunsigned longlongunsigned intint。例外情况是,当longint大小相同时,unsigned intlong的级别高。
    4. 在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。这个过程可能导致类型升级或降级(降级指把一种类型转换成更低级别的类型)。
    5. 当作为函数参数传递时,charshort被转换成intfloat被转换成double

类型升级通常都不会有什么问题,但是类型降级会导致真正的麻烦。

  1. 强制类型转换运算符
    强制类型转换即在某个量的前面放置圆括号括起来的类型名,该类型名即是希望转换成的目标类型。圆括号和它括起来的类型名构成了强制类型转换运算符

    PS : (type)
    

带参数的函数

  • 形参(形式参数),声明参数就创建了被称为形式参数的变量。
  • 实参(实际参数),函数调用传递的值为实际参数。
  • 变量名是函数私有的,即在函数中定义的变量名不会和别处相同名称发生冲突。
  • 原型,即是函数的声明,描述了函数的返回值和参数。

标签: C/C++, C-Primer-Plus

添加新评论