Skip to content

1. 三目运算符

三目运算符是C语言中唯一的三元运算符,形式为 表达式1 ? 表达式2 : 表达式3

1.1 语法规则

  • 求值规则

    • 如果 表达式1 为真,三目运算符的运算结果为 表达式2 的值。

    • 如果 表达式1 为假,三目运算符的运算结果为 表达式3 的值。

  • 示例

    int a = 10;
     int b = 20;
     int max = (a > b) ? a : b; // 如果 a > b,max = a;否则 max = b
     printf("max = %d\n", max); // 输出:20

1.2 注意事项

  • ?: 是一个整体,不能分开使用。

  • 三目运算符可以嵌套使用,但应避免过度嵌套,以免降低代码可读性。


2. 运算符优先级

运算符优先级决定了表达式中运算符的执行顺序。以下是C语言中常见运算符的优先级(从高到低):

优先级运算符名称或含义使用形式结合方向说明
1[] 数组下标数组名[常量表达式]左到右
() 圆括号(表达式)函数名(形参表)左到右
. 成员选择(对象)对象.成员名左到右
-> 成员选择(指针)对象指针->成员名左到右
2- 负号运算符-表达式右到左单目运算符
~ 按位取反~表达式右到左单目运算符
++ 自增++变量名变量名++右到左单目运算符
-- 自减--变量名变量名--右到左单目运算符
* 取值*指针变量右到左单目运算符
& 取地址&变量名右到左单目运算符
! 逻辑非!表达式右到左单目运算符
(类型) 强制类型转换(数据类型)表达式右到左
sizeof 长度运算符sizeof(表达式)右到左
3/表达式 / 表达式左到右双目运算符
*表达式 * 表达式左到右双目运算符
% 取模整型表达式 % 整型表达式左到右双目运算符
4+表达式 + 表达式左到右双目运算符
-表达式 - 表达式左到右双目运算符
5<< 左移变量 << 表达式左到右双目运算符
>> 右移变量 >> 表达式左到右双目运算符
6> 大于表达式 > 表达式左到右双目运算符
>= 大于等于表达式 >= 表达式左到右双目运算符
< 小于表达式 < 表达式左到右双目运算符
<= 小于等于表达式 <= 表达式左到右双目运算符
7== 等于表达式 == 表达式左到右双目运算符
!= 不等于表达式 != 表达式左到右双目运算符
8& 按位与表达式 & 表达式左到右双目运算符
9^ 按位异或表达式 ^ 表达式左到右双目运算符
10| 按位或表达式 | 表达式左到右双目运算符
11&& 逻辑与表达式 && 表达式左到右双目运算符
12| 逻辑或表达式 | 表达式左到右双目运算符
13?: 三目运算符表达式1 ? 表达式2 : 表达式3右到左三元运算符
14= 赋值变量 = 表达式右到左
15, 逗号运算符表达式, 表达式, ...左到右

3. 类型转换

类型转换分为 隐式转换强制转换

3.1 隐式转换

  • 规则

    • 系统会自动将占用内存较少的类型提升为占用内存较高的类型,再进行运算。

    • 例如,intdouble 运算时,int 会被隐式转换为 double

  • 示例

    double a = 1.0 / 2; // 1.0 是 double,2 被隐式转换为 double
     printf("a = %lg\n", a); // 输出:0.5
     ​
     double b = 1 / 2; // 1 和 2 都是 int,结果为 0,再隐式转换为 double
     printf("b = %lg\n", b); // 输出:0

3.2 强制转换

  • 规则

    • 使用强制类型转换运算符 (类型),将一个变量或表达式转换为指定类型。
  • 示例

    int a = 0;
     double b = 2.3;
     a = (int)b; // 将 b 强制转换为 int
     printf("a = %d\n", a); // 输出:2
     printf("b = %lg\n", b); // 输出:2.3


4. 流程结构

流程结构包括 顺序结构分支结构循环结构

4.1 顺序结构

  • 代码按照从上到下的顺序依次执行。

  • 示例:

    int a = 10;
     int b = 20;
     int sum = a + b;
     printf("sum = %d\n", sum); // 输出:30

4.2 分支结构

  • 包括 ifelse ifelseswitch 语句。

  • 示例:

    int score = 85;
     if (score >= 90) {
         printf("优秀\n");
     } else if (score >= 60) {
         printf("及格\n");
     } else {
         printf("不及格\n");
     }

4.3 循环结构

  • 包括 forwhiledo-while 语句。

  • 示例:

    for (int i = 0; i < 5; i++) {
         printf("%d\n", i);
     }


总结

  1. 三目运算符表达式1 ? 表达式2 : 表达式3,用于简化条件判断。

  2. 运算符优先级:决定了表达式中运算符的执行顺序。

  3. 类型转换

    • 隐式转换:系统自动进行类型提升。

    • 强制转换:使用 (类型) 手动转换。

  4. 流程结构:包括顺序、分支和循环结构,是程序的基本执行方式。

知识如风,常伴吾身