There is no difference b/w ((s *)0)->m and ((i*)0)->j .

But when you write statement (size_t)&(((s *)0)->m)
Then It will not go for accessing the member data. It's not like intermediate step ((s *)0)->m.
just address .

If you have doubt then tell me?