我是否正确使用此功能?我以前从未见过这种情况:
printf("Pulled value %d from index %d\n", prev[block_size-k+i], block_size-k+i);
printf("Pulled value %d from index %d\n", block_size-k+i, prev[block_size-k+i]);
输出
Pulled value 7 from index 0
Pulled value 7 from index 0
您可以看到参数的顺序现在并不重要。我完全失去了
为了清晰起见,我也会拆开它们
printf("Pulled value %d\n", prev[block_size-k+i]);
printf("from index %d\n", block_size-k+i);
输出
Pulled value 0
from index 7
答案 0 :(得分:2)
尽管prev数组的内容是双精度数,但不是整数
这是你的问题。参数的类型必须与printf期望的类型匹配,并且在大多数编译器上没有自动检查。 %d
用于int类型,使用%f
表示浮点数或将转换符插入int。
浮点数具有不同的字节格式,并且在许多系统上是8个字节(从技术上讲,浮点数在传递给printf时自动转换为double)而int是4,所以它只是巧合的是,你的两个印刷语句看起来是一样的。
答案 1 :(得分:0)
如果prev
是双重使用%f
作为占位符:
示例:
#include <stdio.h>
int main() {
double a = 0;
int b = 7;
printf("Pulled value %.0f from index %d\n", a, b);
printf("Pulled value %d from index %.0f\n", b, a);
return 0;
}
输出:
Pulled value 0 from index 7
Pulled value 7 from index 0