geekdoc-python-zh/docs/overiq/021.md

4.9 KiB
Raw Permalink Blame History

C 语言中的条件运算符、逗号运算符和sizeof()运算符

原文:https://overiq.com/c-programming-101/conditional-operator-comma-operator-and-sizeof-operator-in-c/

最后更新于 2020 年 7 月 27 日


条件运算符

条件运算符(?:)是一种特殊的运算符,需要三个操作数。它的语法如下:

语法: expression1 ? expression2 : expression3

下面是条件运算符的工作原理。

第一个expression1被求值,如果它是真的,那么expression2的值成为整个表达式的结果。另一方面,如果expression1为假,那么expression3的值就成为整体表达式的结果。

让我们举个例子:

int a = 5, b = 3;
a > b ? a : b

在上式中,a>b为真,因此变量a的值成为整体条件表达式的结果。

由于a > b ? a : b是一个表达式,我们可以将其值赋给一个变量。

max = a > b ? a : b

条件运算符有时也称为三元运算符。

下面的程序演示了如何使用条件运算符找到两个数字中最大的一个

#include<stdio.h>

int main()
{
    int a, b, max;

    printf("Enter a and b: ");
    scanf("%d%d", &a, &b);

    max = a > b ? a : b;

    printf("Largest of the two numbers = %d\n", max);

    // Signal to operating system everything works fine
    return 0;
}

预期输出:

Enter a and b: 1993 1534
Largest of the two numbers = 1993

条件运算符的优先级远远低于算术、逻辑和关系运算符。但它比赋值和复合赋值运算符更高。条件运算符的结合性是从右向左的(参见 C 中的运算符优先级)。

考虑以下条件表达式:

x ? y : a ? b : c

在这种情况下,expression3本身就是一个条件表达式。此外,由于条件运算符从右向左关联,因此上述表达式相当于:

x ? y : (a ? b : c)

如果x的值为真(即非零),则整个表达式的值为y。否则,整个表达式的值将是(a ? b : c)

逗点算符

逗号运算符允许我们在 C 语法只允许一个表达式的地方放置一个或多个表达式。每个表达式必须用逗号(,)隔开,并从左到右计算。最右边表达式的值成为整个表达式的值。举个例子就能说明一切。

a=2, a++, a+10

这里我们结合了三个表达式,让我们看看它是如何工作的。首先2被分配给变量a,然后a的值增加1。最后对a+10进行了评价。所以整体表达的价值是13

我们再举一个例子。

sum = (a=3, b=4, c=5, a+b+c);

这里首先将3赋给变量a,然后将4赋给变量b5赋给变量c。最后a+b+c被求值,并且整个表达式的结果(即最右边的表达式)被分配给sum

逗号运算符(,)的优先级最低,从左向右关联(参见中的运算符优先级和关联性)。因此,上面表达式中的括号是必要的,否则,变量sum将被赋予一个值3

逗号运算符(,)帮助我们使代码更加简洁。如果不使用逗号运算符,上述任务至少需要 2 条语句。

a=3, b=4, c=5;
sum = a+b+c;

以下程序演示了逗号运算符(,)的作用:

#include<stdio.h>

int main()
{
    int a, b, c, sum;
    sum = (a=3, b=4, c=5, a+b+c);
    printf("Sum = %d\n", sum);
    // Signal to operating system everything works fine
    return 0;
}

预期输出:

Sum = 12

操作符的大小

sizeof是一元运算符,用于确定其操作数的大小。sizeof运算符的一般形式是:

sizeof(object)

其中对象可以是数据类型关键字,如intfloatdouble或表达式或变量。

例如,sizeof(int)给出了一个int数据类型所占的大小。sizeof运算符以字节为单位返回大小。

下面的程序演示了如何使用sizeof()操作符检查系统中基本类型的大小。

#include<stdio.h>

int main()
{
    printf("Size of short = %lu\n", sizeof(short));
    printf("Size of int = %lu\n", sizeof(int));
    printf("Size of unsigned int = %lu\n", sizeof(unsigned int));
    printf("Size of char = %lu\n", sizeof(char));
    printf("Size of float = %lu\n", sizeof(float));
    printf("Size of double = %lu\n", sizeof(double));
    printf("Size of long double = %lu\n", sizeof(long double));

    // Signal to operating system everything works fine
    return 0;
}

预期输出:

Size of short = 2
Size of int = 4
Size of unsigned int = 4
Size of char = 1
Size of float = 4
Size of double = 8
Size of long double = 16

因为 C 在存储需求方面相当灵活。上述程序的输出可能因您的机器而异。

sizeof运算符的优先级与前缀递增/递减运算符相同,从右向左关联(参见中的运算符优先级和关联性)。