首先我們可以先引入乙個中間變數temp進行數值交換。下面的這個函式能不能達到函式交換的目的?
void swap(int x, int y)
int main()
執行一下:
我們發現這個函式是不能完成交換的功能的,這是因為在swap(int x,int y)被呼叫時,實參進行副本初始化,函式並沒有訪問呼叫傳遞的實參本身,因而也不會修改實參的值。也就是說函式被呼叫時傳入的是x,y的值,而不是它們的位址。只有傳入位址才能在函式呼叫時通過位址真正改變兩個數的值。否則就只是改變了函式棧幀裡建立的形參,這樣當函式完成呼叫時,棧幀裡面建立的形參就會隨之消失,無法完成交換。
所以在c語言中我們通常通過傳址來進行兩個數的交換,這時候就會利用到指標。
void swap(int *x, int *y)
int main()
執行一下:
此時就完成了兩個數的交換。
c++中我們可以使用引用形參達到目的:
void swap(int& x, int& y)
int main()
執行一下:
此時也完成了兩個數的交換。
此外,還有一些其它的交換方法供參考:
x = x^y;
y = x^y;
x = x^y;
x = x*y;
y = x/y;
x = x/y;
C語言實現兩數交換函式
我們可以引入乙個簡單的中間變數t進行兩個數值交換。int t t x x y y t 然而在swap int x,int y 被呼叫時,實參進行副本初始化,函式並沒有訪問呼叫傳遞的實參本身,因而也不會修改實參的值。那麼下列函式 void swap int x,int y 將達不到交換的目的。在c 中...
C語言 使用函式實現兩個數的交換。
此題的解決思路為 建立乙個swap函式,引數為a和b,函式內部建立乙個臨時變數tmp,用於交換兩個數。但需要注意的是 函式傳參的過程中需要注意,形參是實參的乙份臨時拷貝,形參的改變不會影響實參,所以此時函式傳參的時候需要傳遞實參的位址 a 即傳址呼叫,在接收部分就要使用指變數來接收 p 這樣可以使實...
兩數之和 c語言實現
題目描述 給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 解題思路 我原先想的是先將陣列的值儲存到乙個...