Nice Explanation Monashi. But I have added few steps
Initially st => [{5, c0},{4,c1},{6,c2},{8,c3},{7,c4}]
Suppose address of variable c is where ci are:
c0 => "become"
c1 => "better"
c2 => "jungle"
c3 => "ancestor"
c4 => "brother"
Line 8 => Initially p is pointing to st, i.e, first element of st which is {5, c0}
Line 9 => Now p is pointing to {4, c1}
Line 10=> ++(p->c) since -> has higher precedence. [ Means: p->c= (p->c)+1 Therefore address of c1 is incremented by 1 and thus c1 => "etter"]
Line 11=> prints 'etter' [because c1 => "etter" now ] and p now points to {6, "jungle"}
Line 12=> *++(p->c) since -> has higher precedence. [ Means: ++(p->c) => (p->c= (p->c)+1) Therefore address of c2 is incremented by 1 and thus c2 => "ungle" and * (++(p->c)) prints the character pointing to, i.e 'u' ]
Line 13=> p->i, which is 6 so prints '6'
Line 14=> prints 'ungle' [Because of modification in the string c2 at Line 12]
Post Execution st => [{5, "become"},{4,"etter"},{6,"ungle"},{8,"ancestor"},{7,"brother"}]