gpt4 book ai didi

c - printf 中的三元运算符

转载 作者:太空狗 更新时间:2023-10-29 14:50:41 25 4
gpt4 key购买 nike

看完this我开始认为我已经学到了很多关于 printf() 的知识。突然我从 this 中找到了以下代码片段书:

int main()
{
char str[]="Hello";
int i=5,j=10;
printf(i>j?"%50s":"%s",str); //unable to understand this
return 0;
}

令人惊讶的是,上面的代码运行没有错误,并且打印了 Hello。据我所知,以下是 printf() 的语法:

int printf(const char *format,argument_list);

所以根据这个语法,printf() 应该以格式字符串开头。但是正如您在上面的代码中看到的那样,printf() 是以 i>j 开头的。这是否意味着我对 printf() 语法的解释是错误的?将三元运算符放在 printf() 中是特例吗?

编辑

我知道三元运算符,我问的是 printf() 的第一个参数,它应该是 const char*,但在我的示例中似乎不是。

最佳答案

条件运算符:

i>j?"%50s":"%s"

是一个表达式,必须先对它求值,然后才能对函数调用本身求值。我们可以通过转到草案 C99 标准部分 6.5.2.2 Function calls 看到这一点,它说:

An argument may be an expression of any object type. In preparing for the call to a function, the arguments are evaluated, and each parameter is assigned the value of the corresponding argument.81)

那么条件运算符的求值结果是什么呢?如果我们转到 6.5.15 条件运算符,它说(强调我的):

The first operand is evaluated; there is a sequence point after its evaluation. The second operand is evaluated only if the first compares unequal to 0; the third operand is evaluated only if the first compares equal to 0; the result is the value of the second or third operand (whichever is evaluated), converted to the type described below.95

所以在任何一种情况下,结果都是一个字符串文字,它将衰减为指向 char 的指针,它满足 printf 的第一个参数的要求。

关于c - printf 中的三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24530795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com