代码之家  ›  专栏  ›  技术社区  ›  Idan

printf如何工作?

  •  6
  • Idan  · 技术社区  · 15 年前

    我看了看,但找不到合适的答案。

    我想知道printf在这种情况下是如何工作的:

    char arr[2] = {5,6};
    
    printf ("%d%d",arr[0],arr[1]);
    

    我在想printf只是遍历格式,当它遇到%d时,例如它从当前位置读取4个字节…然而,这肯定是误解,因为上面的工作是完美的。

    那么,我哪里错了?

    2 回复  |  直到 15 年前
        1
  •  9
  •   unwind    15 年前

    你说得对。但是有 argument promotion 把你的 char 进入 int :s与“varargs”函数一起使用时,如 printf() .

        2
  •  1
  •   anon    15 年前

    当你说:

     printf ("%d%d",arr[0],arr[1]);
    

    字符串和计算两个数组表达式的结果放在堆栈上, printf 被称为。 普林特 从堆栈中获取字符串,并使用其中的%格式化程序按顺序访问其他堆栈参数。确切地说,它是如何做到这一点的,这取决于实际的百分比值——例如, %d 读取4个字节,但 %f 读取8(对于大多数32位体系结构)。