Na poczatku masz dwa wskaźniki tekstowe (char *) - jeden jawnie wskazuje na początek literału znakowego, drugi też przyjmuje tą wartość.
Potem, w linii 4 pętla while przestawia wskaźnik x na koniec napisu - na znak końca (\0).
Niżej od linii 5, w pętli do-while wskaźnik jest cofany i jeśli natrafi na znak różny od '-' wypisywane są kolejno - napotkany znak, pionowa kreska, i pierwotny napis poczynając od wskazywanego miejsca (czyli końcowy fragment napisu). W sumie wychodzi:
s|s
t|t-s
e|e-t-s
g|g-e-t-s
f|f-g-e-t-s