我知道%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,但这里缺少一部分。你必须记住,ptr1
和ptr2
本身指的是内存地址——它们是整数——而不是存储在这些地址的浮点数。地址ptr2
和ptr1
的差值为3,正如您在float *ptr2 = ptr1 + 3
行中设置的那样。
我不能确切地说出你的目标是什么,但如果你试图打印存储在这些地址(我认为你是(的浮点的差值的整数,你需要取消引用指针并执行类型转换。return 0
之前的最后一行应该是printf("%d", (int)(*ptr2 - *ptr1))
。这会将78
打印到控制台。
但是,只有当;"分配";这里是专门使用一个整数。实际上,它会写得更像printf("%0.f", *ptr2 - *ptr1)
,它将数字保持为浮点,但不会在小数点后打印任何内容。