自定義的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...