1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J·マラン:それではでプログラムを書いてみましょう その我々の値を交換しよう 3 00:00:02,700 --> 00:00:04,970 2つの変数xとy。 4 00:00:04,970 --> 00:00:07,490 事前に、私は多くを書きました すでにこのプログラムの。 5 00:00:07,490 --> 00:00:11,130 まず、私は、変数、Xを宣言し、 そして、その中に1の値を格納します。 6 00:00:11,130 --> 00:00:14,120 それから私は、変数yを宣言し、 その中に値2を格納します。 7 00:00:14,120 --> 00:00:17,700 >> それから私は、表示するprintf関数を続行 これらの2つの変数の値。 8 00:00:17,700 --> 00:00:21,090 それから私は別のprintfと主張 これらの変数を交換することができる。 9 00:00:21,090 --> 00:00:23,690 それから私は、スワップと呼ばれる関数を呼び出します。 10 00:00:23,690 --> 00:00:26,100 そして私は、変数と主張している 入れ替わっている。 11 00:00:26,100 --> 00:00:30,610 そして私はプリントアウトすることが、私が主張 xおよびyの新しい値である。 12 00:00:30,610 --> 00:00:32,030 >> 今、この関数はスワップとは何でしょうか? 13 00:00:32,030 --> 00:00:34,970 それは、C.に付属しているものではありません 確かに、私たちは私の上部のを見れば 14 00:00:34,970 --> 00:00:38,850 ファイルには、私が宣言したことに気づくでしょう この関数スワップのプロトタイプ 15 00:00:38,850 --> 00:00:42,750 それは2つのintを取ることを指定して、 任意に、AとBと呼ばれ、この 16 00:00:42,750 --> 00:00:44,300 この関数は何も返しません。 17 00:00:44,300 --> 00:00:48,370 だから、おそらく、それは言うことない スワップのaとbの値の。 18 00:00:48,370 --> 00:00:50,170 さあスワップを実装してみましょう。 19 00:00:50,170 --> 00:00:53,820 >> まず、私は一時的に宣言するつもりだ 変数とそれに割り当て 20 00:00:53,820 --> 00:00:57,260 の値が、しかし私はちょうどでし として容易bに格納される。 21 00:00:57,260 --> 00:01:00,925 私はその後、値を変更するつもりです Bのそれと等しくなるようにする。 22 00:01:00,925 --> 00:01:04,849 した後、最後に、私は変更するつもりだ bの値はどのようなものだったが、あるであることが 23 00:01:04,849 --> 00:01:06,340 今TEMPに。 24 00:01:06,340 --> 00:01:08,910 >> 今私は私が何をやったか主張 論理的に正しいです。 25 00:01:08,910 --> 00:01:12,780 私は、一時的な変数に格納されました その後、B型のようにするの値を変更し、 26 00:01:12,780 --> 00:01:15,580 のが何であったかであると、Bの値を変更しました。 27 00:01:15,580 --> 00:01:18,620 しかし、ときに私はこれをコンパイルして実行 このプログラムは、私はそれがありません心配 28 00:01:18,620 --> 00:01:20,140 私が見たものだろう。 29 00:01:20,140 --> 00:01:21,625 >> ありませんが、スワップを行いません。 30 00:01:21,625 --> 00:01:24,350 ドットスラッシュ、無交換。 31 00:01:24,350 --> 00:01:27,560 そして、残念ながら、printf関数によると、 xとyの値は、偶数 32 00:01:27,560 --> 00:01:31,560 私たちは、スワップであると主張した後 彼らはまだ1と2です。 33 00:01:31,560 --> 00:01:32,630 >> 今、これはなぜですか? 34 00:01:32,630 --> 00:01:36,160 まあ、それは、メインでは、ときに我々が判明 を渡し、この関数はスワップを呼び出す 35 00:01:36,160 --> 00:01:39,960 xとyを引数として、実際の xとyのコピー 36 00:01:39,960 --> 00:01:41,310 スワップに渡されます。 37 00:01:41,310 --> 00:01:45,430 すなわち、それらの値1と2は aとbのように、スワップに合格しました。 38 00:01:45,430 --> 00:01:48,590 そして、それは我々が最終的にだとBの 主にスワップ。 39 00:01:48,590 --> 00:01:50,810 >> すなわち、2が1になり、1が2になる、である。 40 00:01:50,810 --> 00:01:54,630 しかしスワップに戻り値がないため、 それは、xのコピーを受信したため 41 00:01:54,630 --> 00:01:58,220 そして、Y、それの動作があります xとyには影響ありません。 42 00:01:58,220 --> 00:02:02,610 確かに、AとBは、いわば、スコープされ、 xとyが残っているのに対し、スワップする 43 00:02:02,610 --> 00:02:03,990 主にスコープ。 44 00:02:03,990 --> 00:02:05,070 >> だから我々は問題を抱えている。 45 00:02:05,070 --> 00:02:06,320 しかし、どのようにそれを修正するには? 46 00:02:06,320 --> 00:02:08,312