表达式
表达式
表达式由运算对象(变量、常量、字面量、数返回值) 和运算符(运算对象的操作符)组成.
表达式的结果
- 左值与右值: 左值指表达式的值进行内存寻址与修改的量. 例如变量、常量、字符串字面量. 右值指表达式的值不能进行内存寻址与修改. 例如数值字面量、函数返回值、类型转换
- 数据类型: 指的是表达式结果数据类型.
- 类型转换: 不同数据类型间进行运算, 可能需要对数据进行转换. 数据类型的转换可能产生精度和安全性问题.
- 隐式类型转换:
- 运算时不同类型运算对象参与运算低类型会往向高类型转换;
- 赋值时右值类型会转换成左值类型, 在进行赋值.
- 强制类型转换: 用括号显式指定类型互转, 忽略任何警告.
- 注意事项:
- 有符号负数转换为无符号数时, 由于符号位的启用, 它比任何有符号数都大!!!!! 有符号负数与无符号数比较时, 很容易出现问题
- 需要格外注意指针的隐式转换, 容易造成越界
- 任何数据类型的转换最好都使用强制类型转换, 代码可读性会好一点.
- 隐式类型转换:
运算符
结构运算符:
结构运算符 使用形式 含义 返回值 下标运算符: [ ] 数组名[常量表达式] 定义数组元素个数或数组元素值引用 数组某元素常量 优先级运算符: () (表达式)或 函数指针(参数) 声明表达式的优先级, 或函数调用 成员选择运算符: . -> 对象.成员
对象指针->成员 选择结构体对象的成员属性 常量 结构运算符参与到构造一个变量, 是从左往右结合的算数运算符
第一级: 单目运算符 使用形式 含义 返回值 负号运算符: - -变量 返回变量的相反数 常量 自增(减)运算符: ++ – ++(–)变量 或 变量++(–) 变量自增或者自减1个单位 ++(–)变量: 返回自增(自减)后的值 变量++(–) : 返回自增(自减)前的值 位反运算符: ~ ~变量 返回变量的位反值 常量 指针运算符: & , * &变量, *变量指针 取变量地址, 取指针指向的值 取址返回的是更高级的指针常量, 取值返回的是更低级的指针常量. (特别)逻辑非: ! !表达式 表达式返回结果取非 0返回常量1, 非0返回常量0 强转运算符: (类型) (类型)表达式 将表达式返回的常量强制转换 常量 为特定的数据类型 长度运算符: sizeof() sizeof(数据类型)或sizeof(变量) 测量表达式返回值数据类型的大小 unsigned int常量第二级: 双目运算符 使用形式 含义 返回值 乘运算 * 表达式*表达式 常量 除运算 / 表达式/表达式 常量 模运算 % 表达式%表达式 常量 第三级: 双目运算符 使用形式 含义 返回值 加运算 + 表达式+表达式 常量 减运算 / 表达式-表达式 常量 第四级: 双目运算符 使用形式 含义 返回值 左移运算 << 变量<<整形表达式 补码左移n位 常量 右移运算 >> 变量>>整形表达式 补码右移n位 常量
逻辑运算符 第一级: 判断运算符 使用形式 含义 返回值 大于(或等于) >(=) 表达式>(=) 表达式 小于(或等于) <(=) 表达式<(=) 表达式 等于 == 表达式==表达式 不等于 != 表达式 != 表达式
第二级: 位逻辑运算符 使用形式 含义 返回值 位与 & 表达式& 表达式 位异或 ^ 表达式^表达式 位或 | 表达式|表达式 第三级: 逻辑运算符 使用形式 含义 返回值 逻辑与 && 表达式&&表达式 逻辑或 || 表达式||表达式
赋值运算符与逗号运算符 第一级: 赋值运算符 使用形式 含义 返回值 赋值运算符: = 左值 = 右值 将右值赋值给左值 运算后赋值: @= 左值 @= 右值 将右值和左值进行@运算后赋值给左值 第二级: 逗号运算符: , 表达式 , 表达式 从左到右分别计算表达式
语句
- 语句: 语句是一个操作(函数、计算等), 语句不一定能够有明确的返回值, 使用分号隔开.