First, pointer arithmetic isn't defined when performed on unrelated pointers.
Second, it makes sense. When subtracting pointers you get the number of elements between those addresses, not the number of bytes.
If you were to try that with
char *p1 = &i, *p2 = &j;
you would get a different result.
As a side note, use %p
when printing pointers.