>>70のプログラムで、出力結果は
string: 0 line = JAPAN
string: 1 line = USA
string: 2 line = FRANCE


となるのですが、どうしても
*((*sp) + j)
の部分できちんと処理されてるのかわかりません

この書き方だと配列strの最初の「J」にjの値を足すことになるのでは?
なぜきちんとアドレスに1足したように処理されているのでしょうか?