Both are legal - if I run your code through an online C compiler (GDB) I get what I expect:
1396230176
1396230180
1396230176 and 1396230180
2
4294967294
The last number is an unsigned integer - it's actually -2 if you use a signed
printf
format code like "%d" instead of "%u"
However, pointer arithmetic is rarely of any real use, just like arithmetic performed on mobile phone numbers: you could subtract my number from yours and get a valid value, but it is not of any real use to anyone for anything!