#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的值时,它会给出不同的输出....解释我为什么
答案 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个字节的内存位置中找到的所有内容。每次随机存储位置的内容可能都不同。