下面是幾個交換兩個數字的函式,分析以下程式,看結果是否正確???
**一、**error
#include
void swap_err1(int a,int b)//error1
int main()//父函式
執行上面程式,結果是:
a=10,b=20;
a=20,b=10;
a=10,b=20;
對結果進行分析,第一行的a和b是main函式中的,輸出的第二行是swap()函式中a和b值,第三行的a,b又是main()中的,然而我們發現主函式中的a,b值並沒有交換
除錯過程發現如下:
main()函式中定義了a和b,a的位址為 f6b0,b的位址為f6b4, 進入swap()中,並且將a和b的值傳給了swap()中的a,b. 雖然a,b這個變數名相同,但是我們發現位址並不同,所以對a和b交換,只是交換了swap()中的a,b的值,並沒有影響到main()中的a和b的值,不能達到要求。
總結: 子函式不能影響到父函式
**二、**error
**如下:
void swap_err2(int *p1,int *p2)
分析這個** ,
將a和b的位址傳給了p1,p2, 所p1,p2以中分別儲存的是a和b的位址;
int *tmp = p1,是將p1(即a的位址)賦值給tmp,
p1 = p2;p2(即b的位址)賦值給p1,
p2 = tmp;tmp(即a的位址)賦值給p2
因此這個函式只是交換了a和b的位址,值並沒有被改變
**三、**error
**如下:
void swap(int *p1,int *p2)
**分析如下:
*tmp是個野指標,tmp會導致程式出錯
四、ok
**如下:
分析:p1,p2以中分別儲存的是a和b的位址;
*p1即是a的值,
*p2即是b的值;
tmp = *p1;
*p1 = p2;
p2 = tmp;
交換p1和p2,即達到了交換了a和b的值
總結:子函式的改變能夠影響到父函式,一定要傳指標和解引用,兩個條件缺一不可
交換兩個變數的值
交換兩個變數的值 交換兩個變數的值是我們學習c語言常見的問題,通常我們採取的方式是定義中間變數,通過中間變數交換這兩個變數值。1 直接在主函式裡完成 int a 2,b 3 int t t a a b b t 2 通過定義swap 完成交換,其中可以通過引用 位址傳遞完成變數值交換 引用 inclu...
交換兩個變數的值
有兩個整數a和b,下面將用四種方法把他們的值進行交換 方法1 借助臨時變數tmp include intmain 如果要求不能建立其他變數,還有下面的方法 方法2 巧妙進行數值運算 include intmain 方法3 二進位制異或運算 include intmain 整數10的二進位制數表示為 ...
交換兩個變數的值
交換兩個變數的值 方式一 定義臨時變數的方式 int temp num1 num1 num2 num2 temp 方式二 num1 num1 num2 num2 num1 num2 num1 num1 num2 好處 不用定義臨時變數 弊端 1 相加操作肯超過儲存範圍 2 有侷限性 只適用於數值型別...