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 兩個變量,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顯示 這兩個變量的值。 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 >> 那麼什麼是這個函數swap? 13 00:00:32,030 --> 00:00:34,970 這不是自帶的C。 事實上,如果我們看一下頂部我 14 00:00:34,970 --> 00:00:38,850 文件,你會發現,我已經聲明 原型為這個函數swap 15 00:00:38,850 --> 00:00:42,750 指定,它需要兩個整數, 任意地稱為a和b,並且此 16 00:00:42,750 --> 00:00:44,300 函數不返回任何東西。 17 00:00:44,300 --> 00:00:48,370 因此推測,它做什麼,它說 在掉期和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 在a的值,雖然我可以只 因為容易儲存在裡面灣 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 現在的溫度。 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 而且它是a和b,我們是最終 交換主。 39 00:01:48,590 --> 00:01:50,810 >> 即,1變為2,2變為1。 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