V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
980502757
V2EX  ›  C

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

  •  
  •   980502757 · 2018-10-17 16:51:41 +08:00 · 3185 次点击
    这是一个创建于 2233 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    printf 返回的是输出的字符数,第一次输出了俩字符,第二次是 1 个
    visitant
        7
    visitant  
       2018-10-17 19:00:20 +08:00 via iPhone
    @GeruzoniAnsasu 我是想回复楼主说的那个入栈的那句话,以前还研究过 printf 的可变参数 手动狗头
    wevsty
        8
    wevsty  
       2018-10-17 19:47:30 +08:00
    入栈顺序是没有标准的,可以从前往后,也可以从后往前,这取决于编译器怎么处理。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5402 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 05:57 · PVG 13:57 · LAX 21:57 · JFK 00:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.