Earlier quoted context omitted.
Of course, you can make something look like not a pointer and then make it a pointer again if you actually change the zeros and ones.
Most languages don't give you any guarantees if you do that, though. In C, for example, pointer arithmetic on a void*, or on a pointer cast to an integer, is not guaranteed to produce sensible results. The standard only provides guarantees for pointer arithmetic if it's performed on a non-void pointer that points within an array, and the results remain within the bounds of the same array (arithmetic that produces a p…
1) Cast a pointer to an integer of sufficient size.
2) Xor that integer with another value.
3) Xor the result with the same value.
4) Cast back to a pointer.
5) Dereference.
It's sufficiently corner-case that I am not certain what the standard says about it. In any event, pointers matter when coding in assembly, where language standards aren't even relevant.