DAVID J.馬蘭:讓我們在寫一個程序 我們嘗試交換的價值 兩個變量,x和y。 事先,我已經寫了很多 這一計劃已經的。 首先,我聲明了一個變量x, 並存儲在它的價值,1。 然後我聲明變量y和 在其存儲的值,2。 然後,我繼續printf顯示 這兩個變量的值。 然後我要求與其他的printf 將交換這些變量。 然後,我調用了交換功能。 然後我要求的變量 已互換。 然後我打印出了什麼我要求 是x和y的新值。 那麼什麼是這個函數swap? 這不是自帶的C。 事實上,如果我們看一下頂部我 文件,你會發現,我已經聲明 原型為這個函數swap 指定,它需要兩個整數, 任意地稱為a和b,並且此 函數不返回任何東西。 因此推測,它做什麼,它說 在掉期和b的值。 現在讓我們來實現交換。 首先,我要聲明一個臨時 變量,並分配給它 在a的值,雖然我可以只 因為容易儲存在裡面灣 我當時要去改變數值 的是等於b中。 然後最後,我要改變 的B值是什麼了,但 現在的溫度。 現在,我要求什麼我剛剛做 在邏輯上是正確的。 我已經存儲在一個臨時變量, 改變了的值是B的,然後 改變B的值是什麼的了。 但是,當我編譯並運行此 程序,我擔心這不是 將我所看到的。 作,沒有交換。 點斜線,沒有交換。 不幸的是,根據printf的, x和y的值,即使 之後我們聲稱要交換 它們仍然是1和2。 現在,這是為什麼? 嗯,事實證明,在主,當我們 調用這個函數的交換,傳遞 x和y作為參數,它實際上 x和y的副本即 傳遞到交換。 即,它們的值1和2是 通過掉期為a和b。 而且它是a和b,我們是最終 交換主。 即,1變為2,2變為1。 但由於交換沒有返回值 並且,因為它接收到的x副本 和y,它的行為已 關於x和y的任何效果。 事實上,a和b的作用域,可以這麼說, 交換,而x和y保持 作用域主。 因此,我們有一個問題。 但如何解決它?