The distinction is meaningless in the land of Opcode's and memory addresses
For example, a struct is just an imaginary "overlay" on top of a contiguous section of memory
Say you have a struct
struct Thing {
int a;
int b;
Thing* child;
}
Thing foo {}
You could easily get a reference to foo->child->b by doing pointer arithmetic
*((*((*foo) + size(int)*2)) +size(int))
(I've not used C much so I've probably got the syntax wrong)