C語言 指標之交換

2021-10-04 06:54:18 字數 1949 閱讀 4114

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競賽 以及其他領域中經常被用到 接下來,我們先看一看氣泡排序。氣泡排序基本思想 通過無序區中相鄰記錄關鍵字間的比較和位置的交換,使關鍵字最小的記錄如氣泡一般逐漸往上 漂浮 直至 水...