Aaaand you proved your ignorance on architecture (not trying to offend you).
A pointer's value cannot be known until the program is run,
Is this true? dont think so, i know some pointers are rebased or something by windows loader but in some way this pointer value is 'produced' in compile+link time.so i am not sure your suggestions are fully true here*
You're seeing pointers are equal to integers in an x86 machine, running probably on Windows or may be even Linux.
Pointers are NOT integers. They're pointers.
An architecture could store, use and load pointers in a special purpose register that cannot directly talk to integer- or general purpose registers.
Memory addresses could be layed out in a segmented memory model, or other model different than the flat model.
C & C++ standards account for that. They even account for architectures where a byte is composed of 61 bits and not 8 bits (an arch that hasn't been produced in decades btw.)
Hence, when you're saying "should be possible"... it is possible in the popular x86 arch running with a flat memory model. But it's probably not gonna be ever standard, because it will not work with radically different targets.