Started by trying to write a small program to translate basic arithmetic into English, I end up building a binary tree(which is inevitably very unbalanced) to represent the
Just convert p to the relevant pointer type:
p
s *a = p; a->i1 = 42; a->i2 = 31;
or
((s *) p)->i1 = 42; ((s *) p)->i2 = 31;