C 中的三元运算符

Sta*_*ack 3 c operators ternary

#include <stdio.h>
int main()
{
    int x = 1;
    short int i = 2;
    float f = 3;
    if (sizeof((x == 2) ? f : i) == sizeof(float)) 
        printf("float\n");
    else if (sizeof((x == 2) ? f : i) == sizeof(short int))
        printf("short int\n");
}
Run Code Online (Sandbox Code Playgroud)

输出是“浮动”。所以我不明白为什么sizeof((x==2)?f:i)总是返回4。我认为声明缺少变量(x==2)?f:i;但它总是返回4(sizeof(f))

你能帮助我吗!这是我学习的第一门编程语言。我知道这个问题很愚蠢,但对我来说很难。感谢您花时间:) 祝您有美好的一天 ;)

而我第一次尝试使用 Stackoverflow 时,可能会出现一些错误。希望你原谅我

Kam*_*Cuk 7

一种表达式是在编译时静态推导出来的。

所以(x == 2) ? f : i表达式的类型和大小在编译时是已知的,并且无论变量值是什么都不会在运行时改变。

在这种情况下,三元运算符的结果类型是使用通常的算术转换(C99 6.5.15p5C99 6.3.1.8p1)确定的。的类型(x == 2) ? f : i确定为float

整体sizeof((x == 2) ? f : i)在编译时进行评估并且等于sizeof(float).

你可以移动x == 2的出来sizeof,使其在运行时进行评估:

if ((x == 2 ? sizeof(f) : sizeof(i)) == sizeof(float))
Run Code Online (Sandbox Code Playgroud)

另请注意,可能会发生这种情况sizeof(short int) == sizeof(float)