为什么第二个printf打印0

Ian*_*ath 3 c pointers output

#include<stdio.h>
int main()
{
    char arr[] = "somestring";
    char *ptr1 = arr;
    char *ptr2 = ptr1 + 3;
    printf("ptr2 - ptr1 = %ld\n", ptr2 - ptr1);
    printf("(int*)ptr2 - (int*) ptr1 = %ld",  (int*)ptr2 - (int*)ptr1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我明白

 ptr2 - ptr1
Run Code Online (Sandbox Code Playgroud)

给出3,但无法弄清楚为什么第二个printf打印0.

Ben*_*hon 8

这是因为当你减去两个指针时,你得到的指针之间的距离是元素的数量,而不是字节.

(char*)ptr2-(char*)ptr1  // distance is 3*sizeof(char), ie 3
(int*)ptr2-(int*)ptr1  // distance is 0.75*sizeof(int), rounded to 0 
Run Code Online (Sandbox Code Playgroud)

编辑:我错误地说,演员强制指针对齐