c++ - Structure memory layout In C -
c++ - Structure memory layout In C -
struct fraction { int num; int denum; } pi; pi.num=22; pi.denum=7; ((fraction*)&(pi.denum))->num=12; cout << endl; cout << pi.denum <<endl; cout << pi.num <<endl;
i can understand memory diagram till point have confusion is next code
((fraction*)&pi.denum)->denum=33;
is there legal way 33 printed out ?? command value stored not in view of object?
a struct fraction
layed out in memory 2 consecutive ints
. code looks @ look &pi.denum
, address of sec integer:
----------------------- | int num | int denum | ----------------------- ^ ^ | | &pi &(pi.denum)
but cast &pi.denum
fraction *
, seek access ((fraction*)&(pi.denum))->num
. since num
first fellow member of struct fraction
, c standard guarantees address same struct itself.
&(((fraction*)&(pi.denum))->num) == (fraction*)&(pi.denum) == &pi.denum.
it is valid memory location - luck. if tried access ((fraction*)&(pi.denum))->denom
, you'd undefined behavior - perchance corrupting memory or causing segmentation fault.
bottom line, ((fraction*)&(pi.denum))->num = 12
nonsense code. never useful.
c++ memory pointers struct
Comments
Post a Comment