You pre increment the value of " i " which now becomes 1 and u access ch = s [1] which is 'h' the second char of the array.

ch=s[i++];
printf("%c ",ch);

This time u use the post increment operator i ++ which causes the prev value of " i " to be used which is 1 and then increments it. So after this expression the value of i is now 2.

ch=i++[s];
printf("%c ",ch);

Arrays can be accesssed as arrayName [index] or index [arrayName] . For eg i can access an array as 3 [arrayName] = 'a'; which will set the fourth element of the array to character a.
Hence u use indirectly ch = 2 [s]; which is 'e'.
At this point the value of i becomes 3.

ch=++i[s];
printf("%c ",ch);

You now increment the ascii value of the character at position 3 which is a space ' '. The next character in the ASCII table after ' ' is ! hence the output.