On your system, the first few integer or pointer arguments are passed in registers and have no addresses. When you take their addresses with &argc
or &argv
, the compiler has to fabricate addresses by writing the register contents to stack locations and giving you the addresses of those stack locations. In doing so, the compiler chooses, in a sense, whatever stack locations happen to be convenient for it.