Defined in header
typedef /*implementation-defined*/ ptrdiff_t;
ptrdiff_t is the signed integer type of the result of subtracting two pointers.
ptrdiff_t is used for pointer arithmetic and array indexing, if negative values are possible. Programs that use other types, such as int, may fail on, e.g. 64-bit systems when the index exceeds INT_MAX or if it relies on 32-bit modular arithmetic.
Only pointers to elements of the same array (including the pointer one past the end of the array) may be subtracted from each other.
If an array is so large (greater than PTRDIFF_MAX elements, but less than SIZE_MAX bytes), that the difference between two pointers may not be representable as ptrdiff_t, the result of subtracting two such pointers is undefined.
PTRDIFF_MAX = 9223372036854775807 p2-p1 = 5
 See also
| unsigned integer type returned by the sizeof operator |
| byte offset from the beginning of a struct type to specified member |
C++ documentation for ptrdiff_t