What should we take away from this? First, it is a big mistake to try to understand pointers in a programming language as if they follow the same rules as pointer-sized integer values.
So what are the actual rules that Clang and GCC are following when compiling these examples? The short answer is that it’s complicated and not well documented.
Good advice for pointers. Be careful, there be dragons! :-)