请教! printf("%d", printf("%d", printf("%d", 12)))如何输出。

2018-10-17 16:51:41 +08:00
 980502757

printf("%d", printf("%d", printf("%d", 12))); ubuntu 上输出结果是:1221

网上查了资料,printf()函数参数是从后往左入栈,打印时再出栈。 但是输出 1221 不能理解,求指导。

3056 次点击
所在节点    C
8 条回复
takeoffyoung
2018-10-17 16:54:55 +08:00
int a = printf("%d", 12);
int b = printf("%d", a);
printf("%d", b)
Yggdroot
2018-10-17 16:55:56 +08:00
首先你要搞清楚 printf ()的返回值是什么。
980502757
2018-10-17 17:09:24 +08:00
@Yggdroot 一语点醒梦中人,多谢。
@takeoffyoung 多谢对问题进行分解。
opiviqo
2018-10-17 17:32:50 +08:00
返回长度
visitant
2018-10-17 18:49:06 +08:00
printf 的可变长度参数,我记得有一个宏专门负责这个来着
GeruzoniAnsasu
2018-10-17 18:52:03 +08:00
@visitant 不,这里其实是个脑筋急转弯

printf 返回的是输出的字符数,第一次输出了俩字符,第二次是 1 个
visitant
2018-10-17 19:00:20 +08:00
@GeruzoniAnsasu 我是想回复楼主说的那个入栈的那句话,以前还研究过 printf 的可变参数 手动狗头
wevsty
2018-10-17 19:47:30 +08:00
入栈顺序是没有标准的,可以从前往后,也可以从后往前,这取决于编译器怎么处理。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/498522

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX