C语言入门指南:操作符(二)

一、赋值操作符

=      +=     -=     *=     /=     %=     &=     ^=     ……

赋值操作符用于给变量赋值:

代码演示:

#include <stdio.h>

int main() {
    int a = 10;
    
    a += 5;   // 等价于 a = a + 5
    printf("a += 5: %d\n", a);  // 15
    
    a -= 3;   // 等价于 a = a - 3
    printf("a -= 3: %d\n", a);  // 12
    
    a *= 2;   // 等价于 a = a * 2
    printf("a *= 2: %d\n", a);  // 24
    
    a /= 4;   // 等价于 a = a / 4
    printf("a /= 4: %d\n", a);  // 6
    
    a %= 4;   // 等价于 a = a % 4
    printf("a %%= 4: %d\n", a); // 2
    
    return 0;
}

二、特殊操作符

1、条件操作符(三元操作符)

    

该操作符是C语言中唯一一个需要三个操作数的操作符,因此也称三元操作符。它提供了一种简洁的方式来根据条件执行两种不同的操作或返回不同的值。

它的语法结构可以看作是一个微型的 if-else 语句,但因为它是一个操作符,所以它可以产生一个值,并直接用在表达式里。

语法形式

condition  ?   expression_if_true   :   expression_if_false;

  • condition:首先计算这个条件表达式。如果结果为(非零),则执行 expression_if_true;如果为(零),则执行 expression_if_false

  • ?: 将条件和两个可能的结果分隔开。

  • expression_if_true: 如果条件为真,则执行这个表达式。

  • :: 分隔两个结果表达式。

  • expression_if_false: 如果条件为假,则执行这个表达式。

如何工作:一个简单的比喻

你可以把它想象成一个决策点:

如果 天气好,那么 我去公园,否则 我待在家里。

在代码中,这个“决策点”被压缩成了一行。

代码示例

示例1:求最大值
#include <stdio.h>

int main() {
    int a = 10, b = 20;
    
    // 使用 if-else 语句
    int max;
    if (a > b) {
        max = a;
    } else {
        max = b;
    }
    printf("最大值是: %d\n", max); // 输出 20
    
    // 使用三元操作符 (功能完全相同,但更简洁)
    int max2 = (a > b) ? a : b;
    printf("最大值是: %d\n", max2); // 输出 20
    
    return 0;
}

示例2:判断奇偶性
#include <stdio.h>

int main() {
    int number = 7;
    
    // 条件 ? 真 : 假
    printf("%d 是%s\n", number, (number % 2 == 0) ? "偶数" : "奇数");
    // 输出:7 是奇数
    
    // 解释:
    // 条件: (number % 2 == 0) -> 7除以2余1,不等于0,条件为假(False)
    // 因此选择冒号后面的表达式 -> "奇数"
    // 整个三元操作符最终的值就是字符串"奇数"
    
    return 0;
}

示例3:简单的赋值控制
#include <stdio.h>

int main() {
    int score = 85;
    char grade;
    
    // 根据分数分配等级
    grade = (score >= 90) ? 'A' : ((score >= 60) ? 'B' : 'C'); // 嵌套三元操作符
    
    printf("分数 %d 的等级是: %c\n", score, grade); // 输出:分数 85 的等级是: B
    
    return 0;
}

注意:虽然可以嵌套使用,但过度嵌套会降低代码可读性。

三元操作符是C语言中一个非常强大的工具,它本质上是一个简洁的条件表达式。它的核心作用是根据条件二选一,并返回一个值。熟练掌握它可以让你的代码更精炼、更专业。

2、sizeof 操作符

作用:

在编译期间获取变量或数据类型在内存中的大小

它是操作符,不是函数!

这是最需要理解的一点。虽然 sizeof 后面常常跟着括号,让它看起来像一个函数(如 sizeof(int)),但括号只有在操作数是数据类型时才是必须的。当操作数是变量名表达式时,括号可以省略。

代码演示:

#include <stdio.h>

int main() {
    printf("int大小: %zu 字节\n", sizeof(int));
    printf("double大小: %zu 字节\n", sizeof(double));
    
    int arr[10];
    printf("数组大小: %zu 字节\n", sizeof(arr)); // 40字节(假设int为4字节)
    
    return 0;
}

3、逗号操作符

作用:

按从左往右的顺序依次执行各个操作数,最后的结果为最右侧的操作数

代码演示:

#include <stdio.h>

int main() {
    int a, b;
    
    // 逗号操作符从左到右求值,返回最右边的值
    int result = (a = 5, b = 10, a + b);
    printf("结果: %d\n", result);  // 15
    
    return 0;
}

三、操作符的优先级和结合性

优先级:

优先级指的是,如果一个代码含有多个运算符,哪个运算符先执行。各种运算符的优先级是不一样的。

26+7*10

上面示例中,表达式 26+7*10里面既有加法运算符(+)又有乘法运算符(*)。由于乘法运算符的优先级高于加法运算符,所以会先计算7*10,而不是先计算26+7.

结合性

如果两个运算符优先级相同,那么优先级就没办法确定那个先计算了,这个时候就要看结合性,则根据运算符是左结合,还是右结合,决定运算顺序。

运算符的优先级顺序很多,下⾯是部分运算符的优先级顺序(按照优先级从⾼到低排列),建议⼤概记住这些操作符的优先级就⾏,其他操作符在使⽤的时候查看下⾯表格就可以了。
•  圆括号( () )
•  ⾃增运算符( ++ ),⾃减运算符( -- )
•  单⽬运算符( + 和 - )
•  乘法( * ),除法( / )
•  加法( + ),减法( - )
•  关系运算符( < 、 > 等)
•  赋值运算符( =
由于圆括号的优先级最⾼,可以使用它改变其他运算符的优先级。
在复杂的表达式中使用括号明确计算顺序,提高代码可读性。

四、常见的陷阱

1、自增自减操作符的前后缀区别

#include <stdio.h>

int main() {
    int a = 5, b;
    
    b = a++;  // 先赋值,后自增
    printf("a = %d, b = %d\n", a, b);  // a = 6, b = 5
    
    a = 5;
    b = ++a;  // 先自增,后赋值
    printf("a = %d, b = %d\n", a, b);  // a = 6, b = 6
    
    return 0;
}

2. 避免除零错误

#include <stdio.h>

int main() {
    int a = 10, b = 0;
    
    // 错误的做法:会导致运行时错误
    // int result = a / b;
    
    // 正确的做法:先检查除数
    if (b != 0) {
        int result = a / b;
        printf("结果: %d\n", result);
    } else {
        printf("错误: 除数不能为零\n");
    }
    
    return 0;
}

3、注意整数溢出

#include <stdio.h>
#include <limits.h>

int main() {
    int max_int = INT_MAX;
    printf("MAX_INT: %d\n", max_int);
    printf("溢出: %d\n", max_int + 1);  // 未定义行为
    
    return 0;
}

希望本文能帮助你更好地理解和运用C语言操作符!

          

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值