4.9 KiB
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赋给变量b,5赋给变量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)
其中对象可以是数据类型关键字,如int、float、double或表达式或变量。
例如,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运算符的优先级与前缀递增/递减运算符相同,从右向左关联(参见中的运算符优先级和关联性)。