go points to "yolo"
1- go+2 will point to l, "%s" will print= lo;
2- ++go will make go=go+1; go will now point to o- "%s" prints olo;
2- According to Dennis Ritchie's book ( who created c programming language) - an array of characters and pointer to string constant both are different,
char g[]="now is the time"; //an array of characters
char *g="now is the time"; //a pointer to sting constant
individual characters within an array can be changed but g will always going to point to same storage. On the other hand, the pointer g may subsequently be modified to point somewhere else, but the result is undefined if you try to modify the string contents.
now coming back to question
++go[1] = ++(go[1]) // [] has higher priority than ++ operator
go[1] points to l ; // note- go was incremented previously
but ++(go[1]) is changing string contents hence segmentation fault is there.