【发布时间】:2014-08-23 05:24:22
【问题描述】:
阅读this 后,我开始认为我学到了有关printf() 的知识。突然我从this book 中发现了以下代码 sn-p:
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* ,我在我的例子中似乎没有。
【问题讨论】:
-
第一个参数内的表达式的结果必须是一个指向常量字符数组的指针,所以没什么奇怪的。
-
你的意思是即使没有双引号也是指向常量字符串的指针
-
如果你这样写,事情可能会变得更清楚:
printf((i>j?"%50s":"%s"), str) -
@A.s.Bhullar
"%50s"和"%s"实际上都是指向常量字符数组的指针。i>j?"%50s":"%s"是一个表达式。该表达式的结果必须是指向常量 char 数组的指针。我认为您将const char *与常量表达式混淆了,它们不是一回事
标签: c syntax printf conditional-operator