关于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
相关产品推荐
相关产品推荐

