任何人都可以告诉我为什么这种情况发生在c语言中

时间:2017-09-02 14:57:59

标签: c

 #include <stdio.h>
 //Compiler version gcc 6.3.0

 int main(void)
 {

     float a=10;
    printf("%f"+1,a);

    return 0;
 }

输出 - d

 #include <stdio.h>
 //Compiler version gcc 6.3.0

 int main(void)
 {

     float a=10;
    printf("%f"+36,a);

    return 0;
 }

输出 - p

当我改变+1的值时,它会给出不同的输出....解释我为什么

3 个答案:

答案 0 :(得分:0)

我不确定你到底想要完成什么。

如果你想要总和,你只需要在逗号之后执行:

来自:

printf("%f"+36,a);

到此:

printf("%f",a+36);

另一笔金额相同。

答案 1 :(得分:0)

你绝对应该编译所有警告。我用了gcc -Wall -Wextra -Werror -pedantic。它没有用我的警告编译,因为printf的参数太多了。

当我测试您发布的代码时,它会打印出&#39; f&#39;和&#39; A ???我不确定你要做什么,但我相信它与你的浮动如何添加数字以给你一个Ascii字符有关。

答案 2 :(得分:0)

每次输出都是不同的,因为它是不确定的,无法从未知地址读取。

与以下代码进行比较:

#include <stdio.h>

int main(){

   printf("Hello,World\n"+1);
}

它看起来像是著名的 Hello,World ,但实际上它是鲜为人知的版本 ello,World printf的参数是字符串,或更确切地说是指向内存中以null终止的char序列的指针,当对"Hello"+1求值时,该指针加1并指向"ello,World"。 / p>

您的程序将首先打印字符串“ f”,在第二种情况下是内存溢出错误,它将打印在距离该字符串36个字节的内存位置中找到的所有内容。每次随机存储位置的内容可能都不同。