c 语言习题

  1. (0 <= x < 100) + (i = j = 0) + (char)(65 + 3)
	int x, i, j;
    int result = (0 <= x < 100) + (i = j = 0) + (char)(65 + 3);
    printf("%d\n", result); //=> 69
    //# 第一个部分 0<=x为0或1然后和100比较永远为真因为不管是0还是1都小于100,所以第一部分结果是1
    //# 第二部分结果为右值就是0
    //# 第三部分虽然是char类型进行+运算的时候会转换成65+3的值就是68
    //=>最后1 + 0 + 68 = 69
    //printf("%d", (0 <= x)); //=> 1

在这里插入图片描述

运算结果是69 并弹了一个警告意为 布尔类型和常量100比较永远为true

void case3()
{
    int x = 2, y = -1, z = 2;
    if (x < y)
        if (y < 0)
            z = 0;
        else
            z += 1;
    printf("%d\n", z); //=> 2
    //# 第一个判断为false所以不往下走,
    //# 而else属于上面的if,第二个if不执行,不会有z=0也不会有+=1
    //# 运算的最后z没有任何操作还是2输出
}

在这里插入图片描述

警告: 添加显式大括号以避免挂起其他大括号
这种写法不规范开发中要避免

猜你喜欢

转载自blog.csdn.net/printf_hello/article/details/115023301