1.使用第三方變數進行交換,**如下:
#include
intmain()
直接使用變數進行交換,在主函式中可直接實現變數值的交換,但是如果定義成函式,在呼叫時,無法通過形參或者返回值返回到主函式中,這時,就需要採取指標進行值的交換。
2.使用指標交換,具體實現過程如下:
#include
void
swap
(int
*a,int
*b)int
main()
3.不使用第三方變數實現交換過程此方法基於的是: a^ a=0 以及 (a^b) ^a=b 這兩個公式。
#include
intmain()
除了使用c語言中的位運算子之外,還可以使用加減法實現兩個變數值之間的相互交換,**如下:
#include
intmain()
也可以將中間的**:
a+=b;// a->30
b=a-b;// b->10
a-=b; //a=20
換成:a-=b;//-10
b+=a;//10
a=b-a;//20
4.不使用第三方變數用指標實現交換過程
0^ 任何數為任何數,a^ a=0; (a^b) ^a=b;
#include
void
swap
(int
*x,int
*y)int
main()
使用此種交換變數的方法對整型陣列進行首尾元素的交換,交換過程如下面的**所示:
#include
//將乙個陣列中的元素頭尾兩端依次對調
void
reverse_array
(int a,
int cnt)
}//列印函式
void
print
(int a,
int cnt)
}int
main()
;reverse_array
(a,cnt)
;print
(a,cnt)
;return0;
}
此程式的執行結果為:
當輸入的陣列元素個數為奇數個時,程式輸出結果為:
由此可以看出,此程式在陣列元素為奇數個時,輸出發生錯誤,對程式進行檢查,發現呼叫此函式,當陣列個數為偶數個時,結果正確,為奇數個時,結果錯誤,中間的元素變為0,因為此時first和last同時指向同一位址,當改變first指標所指向的值置為0時,last的值也由於位址相同的緣故變成了0,所以無論後面如何進行運算,結果都為0。
//改進版:將乙個陣列中的元素頭尾兩端依次對調
void
improve_reverse_array
(int a,
int cnt)
}
對改進後的程式進行測試:
int
main()
;improve_reverse_array
(a,cnt)
;print
(a,cnt)
;return0;
}
c語言指標的之交換兩個數的值
下邊是乙個例子 includevoid change int x,int y int main 下圖是除錯過程 首先找到函式入口 main 執行 int a 5 int b 3 進入change函式 change x 5,y 3 tmp x p tmp列印tmp驗證一下tmp 5 x y p x 列...
C語言學習之交換 冒泡 排序
在學習c語言的過程中,在陣列內容中我們總是能學習到對一組資料進行排序,對於排序有許多的方法,像 交換 氣泡排序 選擇排序 基數 桶排序 插入 二分法排序等等。我主要以我個人的理解去分析常見的交換 冒泡 排序,同時本人也是個新手,希望能以我的手筆讓其他不懂的新手了解透這些排序。交換 冒泡 排序 又名為...
排序專題之交換排序
在交換排序這一類中,分為氣泡排序和快速排序,快速排序是建立在 氣泡排序基礎上的乙個優化,很有意義的乙個排序,在各種acm競賽 以及其他領域中經常被用到 接下來,我們先看一看氣泡排序。氣泡排序基本思想 通過無序區中相鄰記錄關鍵字間的比較和位置的交換,使關鍵字最小的記錄如氣泡一般逐漸往上 漂浮 直至 水...