C语言有趣的printf

Python010

C语言有趣的printf,第1张

printf()也是一个函数,而且它需要的第一个参数是个字符指针,也就是说,printf()函数的的第一个参数可以是个字符指针,而不一定非要是一个字符串常量。

知道这一点后就可以理解这个调用了:

它等价于:

char *p=(x%2)?("**%d"):("##%d\n")

printf(p,x)

明白了吗,如果不明白,那么进一步等价于(虽然语法上可能不怎么正确,但是这里要说明的是它的算法):

char *p

if (x%2!=0) p="**%d"

else p="##%d\n"

printf(p,x)

a 是格式化字符串, 替换后程序实际打印为:

printf( "main() {char*a=%c%s%cprintf(a,34,a,34)}", 34, "main() {char*a=%c%s%cprintf(a,34,a,34)}", 34 )

34的ASCII是双引号,最后打印为

main() {char*a="main() {char*a=%c%s%cprintf(a,34,a,34)}",34)}

理解上应该不是很困难,不过看上去比较复杂而已