代码之家  ›  专栏  ›  技术社区  ›  Ashish sah

为什么printf的这个错误语法没有在c中产生错误?

c
  •  1
  • Ashish sah  · 技术社区  · 6 年前

    我用这个语法打印了一些变量n。 我知道语法错误,但无法理解幕后发生的事情。它甚至没有造成错误。 主要方法内部:

    int fac,p=1,n,i;
    printf("Enter the value of n \n");
    scanf("%d",&n);
    printf("The factorial is \n %d"+n);
    

    我用过 +n 在最后一行,这不是正确的语法。 输入为1输出为:

    he factorial is
    1
    

    输入为5输出为:

    actorial is
    1
    

    有人能帮我弄清楚幕后发生了什么吗?编译器是怎么理解的 +n 打印功能?从输出的1开始?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Mureinik    6 年前

    字符串文本只是指向char数组的指针。当您添加 int 对指针执行指针运算,然后移动指针。这里,你的阶乘是4,所以你把指针向上移动了4个字符,所以你失去了 "The " .

    这个 %d 将从堆栈中取出以下值并将其解释为 int . 对你来说,这只是碰巧 1 .