在C C 中,自定義的swap函式詳解

2021-07-10 11:28:09 字數 1854 閱讀 5888

自定義的swap函式是乙個老掉牙的問題,而這個問題對於理解指標和記憶體中的棧是很有幫助的

一般自定swap函式是這樣的:

1.swap函式的功能是實現兩個的相互替換

2.在main函式中呼叫swap函式,以實現main棧中兩個數的相互替換

void swap1(int x, int y)

{//當

swap1

傳入的是整形變數時,

swap1

棧中會開闢了

2個整形變數副本,當

swap1

執行結束時,

swap1

棧會銷毀,所以這兩個副本也會銷毀。這時,

swap1

裡面的任何操作對

man函式棧中的a,

b是沒有任何作用的,所以是不能交換的

int temp;

temp = x;

x = y;

y = temp;

void swap2(int *x, int *y)

{//這裡邊很多人可能就不能理解了!在

main

棧中,&a指向4

的位址,

&吧指向

5的位址,

swap2

函式在swap2

棧中定義了兩個整形變數指標

x,y;

一開始x 

指向 4

的位址,y指向

5的位址

,函式執行完最後一步時

(swap2

棧還沒銷毀前),

x指向5的位址,y指向

4的位址,這時*x和

*y值交換是成功的。但是這種交換並沒有改變

main

棧中&a和&b

的指向,

&a依然指向的是

4的位址,

&b依然指向的是

5的位址。簡單總結一下就是,

swap2

函式只是交換了x和

y的指向的位址,卻並沒有影響到&a和

&b指向的位址

int *temp;

temp = x;

x = y;

y = temp;

void swap3(int *x, int *y)

{//在

main

棧中,&a指向4

的位址,

&吧指向

5的位址,

swap2

函式在swap2

棧中定義了兩個整形變數指標

x,y;

一開始x 

指向 4

的位址,y指向

5的位址。也就是說&a和

x指向同乙個位址,&b和

y指向同乙個位址!函式執行完最後一步時

(swap2

棧還沒銷毀前),

x和y把自己指向的位址的值改變了,這時候的改變就影響到了

main

棧中&a和&b

指向的位址的值,所以交換就成功了

int temp;

temp = *x;

*x = *y;

*y = temp;

void swap4(int *x, int *y)

{//這個程式執行時是會報段錯誤的,因為

temp

沒有初始化指標,但是卻馬山用了它,這是很危險的

int *temp;

*temp = *x;

*x = *y;

*y = *temp;

int main(void)

int a = 4;

int b = 5;

swap1(a, b);

swap2(&a, &b);

swap3(&a, &b);

return 0;

swap函式自定義實現

swap函式大家都很熟悉了,用於將兩個物件進行交換,但是在std中swap需要進行乙個拷貝構造,兩次賦值操作。這對於小物件是可以接受的,但對於較大的物件來書,這個時間可是有點長了,所以可能要在特定的類中自定義swap成員函式。1 對於int型的swap函式,可以使用異或操作符來進行交換,具體看如下 ...

Loadrunner自定義函式在指令碼中的應用樣例

include web api.h int sumfour int a,int b,int c,int d 自定義四個整型數字求和函式 else action 不符合函式要求的數字集合 int vaild 4 符合函式要求的數字集合 int expect 5 針對vaild陣列的預期結果陣列 int...

C C 自定義函式 返回值

根據返回值型別來定義為int,並且在子函式結尾一定要寫上return result 需要返回的值 int main中需要定義乙個新的變數去接收子函式返回的值 全域性變數的生命期是永恆的,如果返回乙個區域性變數的位址會出現問題 變數在子函式中或者在if語句後出現都會隨著程式的執行時變數失效 inclu...