You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于C语言%d与%f格式符及指针相减输出结果的疑问

为什么ptr2 - ptr1的输出结果是3?

核心原因:C语言的指针算术规则

在C语言中,同类型指针之间的减法运算,结果表示的是两个指针之间相隔的元素个数,而非字节数。

结合代码拆解

看你的代码:

#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;
}
  • ptr1指向数组arr的第一个元素arr[0];
  • ptr1 + 3是指针加法,会按照float类型的长度(通常为4字节)向后偏移3个元素的位置,最终ptr2指向arr[3];
  • 执行ptr2 - ptr1时,编译器会计算两个指针之间的元素数量差:arr[3]和arr[0]之间刚好隔了3个元素,所以结果为3,用%d格式输出就显示3。

额外补充

如果想计算两个指针之间的字节数差值,需要把指针强制转换为char*类型后再相减,比如:

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

此时结果会是3 * sizeof(float),通常为12(因为float占4字节)。

内容的提问来源于stack exchange,提问作者OkCloudy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:31:02