C語言中如何用指標交換兩個數的大小
阿新 • • 發佈:2019-01-10
如何用傳址的方式交換兩個數的大小
首先先看第一個程式,用函式的呼叫來解決看似正確實則執行出來的結果是錯誤的
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<math.h> int JH(int x, int y); int main() { int a, b; printf("請輸入兩個數:\n"); scanf("%d%d", &a,&b); JH(a, b); printf("交換後兩數的值分別為%d和%d", a,b); system("pause"); return 0; } int JH(int x, int y) { int temp; if (x != y) { temp = x; x = y; y= temp; } return 0; }
首先我們先來分析一下這個程式,他只該表了x和y的值並未改變a和b的值,由於單向的值傳遞方式,形參的改變不能使實參發生改變,所喲最後輸出的結果仍然和輸入的值一樣並未改變a和b的值。因此行參只是實參的一個拷貝,形參改變了只是拷貝改變了,實參仍為原來的值,但是你如果用傳址呼叫的話,把形參定義為指標變數,實參呼叫地址的話,單你把指標所指的變數改變,實參所對應的值也改變了。所以下面我們來修改這個程式
<pre name="code" class="csharp">#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int JH(int *x, int *y); int main() { int a,b,*p1,*p2; printf("請輸入兩個數:\n"); scanf("%d%d", &a,&b); p1 = &a; p2 = &b; JH(p1,p2); printf("交換後兩數的值分別為%d和%d", *p1,*p2); system("pause"); return 0; } int JH(int *x, int *y) { int p; if (*x != *y) { p = *x; *x = *y; *y = p; } return 0; }
改進後的程式執行出來是沒有問題的