int main(void)
{
return('yes', *"no", **main, *********printf) ("hello world!\n") *0;
}
Run Code Online (Sandbox Code Playgroud)
输出hello world!
,但它如何实际工作?
ram*_*ion 46
真的有两件事:
*main == main
所以,如果我们简化指针:
int main(void)
{
return('yes', *"no", main, printf) ("hello world!\n") *0;
}
Run Code Online (Sandbox Code Playgroud)
并使用列表中的最后一个元素作为列表的值
int main(void)
{
return printf("hello world!\n") *0;
}
Run Code Online (Sandbox Code Playgroud)
printf
返回打印的字符数
int main(void)
{
return 13 *0;
}
Run Code Online (Sandbox Code Playgroud)
13*0留给读者练习.
el.*_*ado 12
('yes', *"no", **main, *********printf)
Run Code Online (Sandbox Code Playgroud)
将评估为*********printf
,因为逗号运算符计算其操作数并返回最后一个表达式的值.*********printf
等于printf,因为解除引用函数指针会产生相同的函数指针; 它什么都不做.
接下来,将第一个括号printf的结果应用于("hello world!\n"),这导致文本打印到屏幕.printf函数返回写入的字符数.然后将该数字乘以0,并通过main函数返回乘积.