先看下面一段程序:

文末会给大家推荐几本好书,希望能够需要的朋友一点帮助!


#include <stdio.h>

int main()
{
int i = 123;
printf("%d\n",printf("%d",printf("%d",i)));
return 0;
}

printf函数里面又嵌入了printf函数,你认为此段程序会打印出什么?

程序的实际运行结果是:


对于这个运行结果,你怎么看?
我们来一步步分解printf函数,看看为啥会输出这个结果。 

程序中的print函数是这样写的:
printf("%d\n",printf("%d",printf("%d",i))); 
一共有三个printf函数,我们可以使用一些代号来简化这个printf函数,如下:
代号A: 
printf("%d",printf("%d",i));
代号B: 
printf("%d",i)

则程序代码可以简化为:
printf("%d\n",A); 那么我们就先来求A。
而A,又可以简化为:
printf("%d",B);那么我们就先来求B。

B是 
 printf("%d",i),打印出“123”,即在运行结果中,你最先看到的是123。printf函数的返回值是printf实际控制输出的字符数,那么打印的123 就是3个字符,因此printf("%d",i)返回的就是3,也就是B是3,那么,A就可以写为printf("%d",printf("%d",3));打印出3,即在运行结果中,你紧接着会看到3。而打印出的3是1个字符,因此A就是1,那么printf("%d\n",A); 实际上就是printf("%d\n",1); 打印出1,即在运行结果中,你最后看到的就是1.



posted on 2017-01-07 16:19  C语言答疑课堂  阅读(3443)  评论(0编辑  收藏  举报