ptrdiff_t is signed, while size_t is not, but both can safely hold the address of a pointer. How is it possible when half the possible values of ptrdiff_t will be negative, so its capacity must be half of that of size_t when it comes to storing pointers, as pointer adresses can't be negative.
Also, it can't be used as an index of an array to hold a very large no. of elements like say 2^30 as an index of an array is not possiblr with ptrdiff_t as 2^30 is not a valid no. in ptrdiff_t (it will slip into negative ), but it can be done in size_t