スピーカ1:それは私たちが解決できます 首尾よく2で値を交換 にそれらを渡すことによって、変数 値ではなく、コピーすることで機能しますが、 参照するか、またはそのアドレスによって。 言い換えれば、我々は活用する必要があります ポインタとして知られているもの。 ポインタは、実際には、単にある いくつかの変数のアドレス。 そして私たちは、呼び出された関数を提供する場合 たとえば、アドレスを交換する 変数と別のアドレス 変数、スワップに権限を与えられるべきである それらのアドレスのそれぞれに行く そして、実際に変更 ある値。 のコンテキストでこれを見てみましょう。 次のようにのスワップを再実装してみましょう。 最初に、int型ではないと変更してみましょう しかし、int型へのポインタまたはすべき int型のアドレス。 そして、変化する、のはBのために同じことをやってみましょう int型から、体へのポインタであると intまたはint型のアドレス。 次に、スワップの内側に、まだみましょう 我々が持っているように、TMPを宣言 の値の一時的な場所。 しかし、の値は、それ自体ではない、なぜなら、 もう一度、Aは今のアドレスです いくつかのint型の。 だから我々はそのアドレスに移動する場合や そのアドレスにint型を取得し、我々は持っている このポインタを間接参照、また経由で スターオペレーター、スターAを書いて。 次に、私は変更したくない の値。 Iは、ある値を変更する 再度、覚えておいて、 そのAがアドレスです。 そうそのためには、私は再び必要に 回答をスターAが取得します。 そして今、私は値を入れたい すなわち、b項にbの値ではないもの また、アドレスです。 だからもう一度、私は、スターのBと言う。 その後、私の最後の行で、私のことを行う必要があり bとアドレスにあるものに上書き Aの元の場所にあったもの。 そのためには、私はスターBはTMPを取得しております。 今、一日の終わりに、この この関数は単にまだある 3行のコード。 しかし、それはだから値を操作する それらのアドレスを経由してではない に渡された生の値 機能、私はスワップが今であることを主張 その値を変更する権限を与え そのアドレスを経由して渡されます。 しかし、私はまだ1変更を加える必要があります。 私はもはや渡すことはできません xとyの自分自身。 私はアドレスを渡す必要があり xとyの。 そしてそのためには、私は少しいくつかを必要とする 異表記までトップ。 私は渡すことによって、xとyを交換したい で示される、xのアドレス、 アンパサンドxおよびアドレス yは、アンパサンドyによって示される。 同様に、トップまで、今私がする必要がありますか への関数のプロトタイプを変更する 私が行った変更と一致し、その結果、 再び、int型へのポインタである。 Bは、再び、int型へのポインタである。 そして今、私は私のファイルを保存することができます。 とのは、それを再コンパイルして実行してみましょう。 スワップドットスラッシュスワップを行います。 このとき、x、yは現在確かである それらの値がないことを、このようなスワップ 図1及び図2が、2と1。