c1 如何在 va_arg 中取这个值?

How c1 is taking this values in va_arg?

我不明白 c1 是如何打印 65, 66, 67, 68 的。我知道 char c 是如何打印 A B C D 的,但是 c1 是如何输出奇怪的?

    #include<stdio.h>
    #include<stdarg.h>
    void display(int num, ...);

    int main()
    {
      display(4, 'A', 'B', 'C', 'D');
      return 0;
    }
    void display(int num, ...)
    {
      char c, c1; int j;
      va_list ptr, ptr1;
      va_start(ptr, num);
      va_start(ptr1, num);
      for(j=1; j<=num; j++)
       {
        c = va_arg(ptr, int);
        printf("%c", c);
        c1 = va_arg(ptr1, int);
        printf("%d\n", c1);
       }
     }

这不是一个奇怪的输出。您在 printf("%d\n", c1); 中提到格式说明符为“%d”。 “%d”是整数格式说明符。因此,变量 c1 被隐式类型转换为整数,即字符的 ASCII 值。因此,在您的情况下,它将 'A' 打印为 65,将 'B' 打印为 66 等

请参阅 fprintf()

中的转换说明符主题