C語言 C 實現兩數交換函式

2021-08-29 01:10:48 字數 1004 閱讀 3211

首先我們可以先引入乙個中間變數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 解題思路 我原先想的是先將陣列的值儲存到乙個...