无法理解C代码的输出

Bar*_*uri 0 c

#include<stdio.h>

int main()
{
    int a=5;
    printf("%d \n"+1,a);   // output : d
    printf("%%d \n"+1,a);  // output : 5
    printf("%q \n"+1,a);   // output : q
    printf("%%q \n"+1,a);  // output : q
    printf("%k \n"+1,a);   // output : k
    printf("%%k \n"+1,a);  // output : k
    printf("ABCD \n");     // output : ABCD
    printf("ABCD \n" +1);  // output : BCD
    printf("ABCD \n" +3);  // output : D
}
Run Code Online (Sandbox Code Playgroud)

我无法理解上述程序给出的输出.我是新手.如果我必须知道指针中的高级主题?

ACc*_*tor 7

"%d \n"+1返回指向包含空格的指针"d \n".同样,"%%d \n"+1 返回指向的指针"%d \n".

因此,声明

printf("%%d \n"+1,a);  // output : 5
Run Code Online (Sandbox Code Playgroud)

相当于

printf("%d \n", a);
Run Code Online (Sandbox Code Playgroud)

这就是它输出5的原因.

至于"%%q \n"+1哪个是等价的%q \n,%q不是预定义的格式说明符,并且行为是未定义的(参见C1X第315页).

其他陈述的答案是相似的.