>> DAVID J·マラン：それではでプログラムを書いてみましょう その我々の値を交換しよう
2つの変数xとy。
事前に、私は多くを書きました すでにこのプログラムの。
まず、私は、変数、Xを宣言し、 そして、その中に1の値を格納します。
それから私は、変数yを宣言し、 その中に値2を格納します。
>> それから私は、表示するprintf関数を続行 これらの2つの変数の値。
それから私は別のprintfと主張 これらの変数を交換することができる。
それから私は、スワップと呼ばれる関数を呼び出します。
そして私は、変数と主張している 入れ替わっている。
そして私はプリントアウトすることが、私が主張 xおよびyの新しい値である。
>> 今、この関数はスワップとは何でしょうか？
それは、C.に付属しているものではありません 確かに、私たちは私の上部のを見れば
ファイルには、私が宣言したことに気づくでしょう この関数スワップのプロトタイプ
それは2つのintを取ることを指定して、 任意に、AとBと呼ばれ、この
この関数は何も返しません。
だから、おそらく、それは言うことない スワップのaとbの値の。
さあスワップを実装してみましょう。
>> まず、私は一時的に宣言するつもりだ 変数とそれに割り当て
の値が、しかし私はちょうどでし として容易bに格納される。
私はその後、値を変更するつもりです Bのそれと等しくなるようにする。
した後、最後に、私は変更するつもりだ bの値はどのようなものだったが、あるであることが
今TEMPに。
>> 今私は私が何をやったか主張 論理的に正しいです。
私は、一時的な変数に格納されました その後、B型のようにするの値を変更し、
のが何であったかであると、Bの値を変更しました。
しかし、ときに私はこれをコンパイルして実行 このプログラムは、私はそれがありません心配
私が見たものだろう。
>> ありませんが、スワップを行いません。
ドットスラッシュ、無交換。
そして、残念ながら、printf関数によると、 xとyの値は、偶数
私たちは、スワップであると主張した後 彼らはまだ1と2です。
>> 今、これはなぜですか？
まあ、それは、メインでは、ときに我々が判明 を渡し、この関数はスワップを呼び出す
xとyを引数として、実際の xとyのコピー
スワップに渡されます。
すなわち、それらの値1と2は aとbのように、スワップに合格しました。
そして、それは我々が最終的にだとBの 主にスワップ。
>> すなわち、2が1になり、1が2になる、である。
しかしスワップに戻り値がないため、 それは、xのコピーを受信したため
そして、Y、それの動作があります xとyには影響ありません。
確かに、AとBは、いわば、スコープされ、 xとyが残っているのに対し、スワップする
主にスコープ。
>> だから我々は問題を抱えている。
しかし、どのようにそれを修正するには？