Man sollte vielleicht noch erwähnen:
1. Das derzeit gezeigte Programm führt selber niemals einen Zugriff auf x+4 aus, es setzt lediglich einen Zeiger, s , hinter das Ende von x . Dieser wird aber dekrementiert, bevor der Zugriff erfolgt. Das setzen eines Zeiger um 1 hinter das Ende eines Arrays ist erlaubt, der Code an sich ist also völlig in Ordnung. Bloß, was dir dein Debugger als Ziel von *s zeigt, ist undefiniert. Bei dir ist es anscheinend argv , wenn ich gleiches bei mir versuche, erhalte ich einen Programmabsturz. Undefiniertes Verhalten eben.
2. Wenn du den Code denn so umschreibst, wie es DirkB gesagt hat, dann wird entsprechend dein Debugger höchstwahrscheinlich einen ganz anderen Wert als Ziel von *s anzeigen, da argv (welches wiederum auf "prog" zeigt) dann an anderer Stelle im Speicher liegen wird.