函式實作兩個數交換
首先,我們來看看不使用函式,怎么實作兩個數字的交換呢?
#include <stdio.h>
int main()
{
int a = 50;
int b = 100;
int temp = a;
a = b;
b = temp;
printf("a=%d b=%d\n", a, b);
system("pause");
return 0;
}
結果:a和b成功的實作了交換,

那么使用函式如何實作呢?
很多人會覺得,只需要將上面交換數字的部分放到函式中就可以了,那我們來試試:
#include <stdio.h>
void swap(int x, int y){
int temp = x;
x = y;
y = temp;
}
int main()
{
int a = 50;
int b = 100;
swap(a, b);
printf("a=%d b=%d\n", a, b);
system("pause");
return 0;
}
結果:

分析:我們可以看到,在這個代碼中, a和b沒有發生交換,
那么x,y發生交換了嗎?
我們可以在函式中加入輸出x,y值的代碼看一下,
代碼:
void swap(int x, int y){
int temp = x;
x = y;
y = temp;
printf("x=%d y=%d\n", x, y);
}
結果:

分析:在這個代碼中我們發現,a和b沒有發生交換,函式內部交換的是 x 和 y,x 和 y 相當于創建出的新的區域變數,只是通過a,b初始化了,交換 x 和 y 不會影響到 a 和 b,
原因是: 函式內部訪問的x和y不是a和b的本體,
??要想解決這個問題,就需要想辦法讓函式內部能夠訪問到函式外面的變數,在C語言中,我們不能直接訪問函式外部的區域變數,但是 可以使用指標來間接訪問外部的變數,
代碼實作:
void swap(int* x, int* y){
int temp = *x;
*x = *y;
*y = temp;
}
此處的 swap 函式等價于以下代碼:
int* x = &a;
int* y = &b;
int temp = *x;
*x = *y;
*y = temp;
int temp = a;
a = b;
b = temp;
printf("a = %d, b = %d\n", a, b);
在這個代碼中, 先定義兩個指標變數x,y,其中x保存a的地址,y保存b的地址,代表對指標的解參考,表示指標指向的目標, 所以x 就等價于 a,*y等價于,然后通過臨時變數temp交換a,b,
最終的代碼實作:
#include <stdio.h>
void swap(int* x, int* y){
int temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int a = 50;
int b = 100;
swap(&a, &b);
printf("a=%d b=%d\n", a, b);
system("pause");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/194333.html
標籤:其他
