%d与%f格式说明符(不确定输出):C



我知道%d是类型decimal的格式说明符,%f是浮点,但我不确定为什么第二个print语句的输出是3。

#include <stdio.h>
int main()
{
float arr[5] = {12.5, 10.0, 13.5, 90.5, 0.5};
float *ptr1 = &arr[0];
float *ptr2 = ptr1 + 3;

printf("%f ", *ptr2);
printf("%d", ptr2 - ptr1);

return 0;
}

因此,指针算术似乎基本上是错误的,因为您理解为什么*ptr2等于90.5,但这里缺少一部分。你必须记住,ptr1ptr2本身指的是内存地址——它们是整数——而不是存储在这些地址的浮点数。地址ptr2ptr1的差值为3,正如您在float *ptr2 = ptr1 + 3行中设置的那样。


我不能确切地说出你的目标是什么,但如果你试图打印存储在这些地址(我认为你是(的浮点的差值的整数,你需要取消引用指针并执行类型转换。return 0之前的最后一行应该是printf("%d", (int)(*ptr2 - *ptr1))。这会将78打印到控制台。

但是,只有当;"分配";这里是专门使用一个整数。实际上,它会写得更像printf("%0.f", *ptr2 - *ptr1),它将数字保持为浮点,但不会在小数点后打印任何内容。

最新更新