大家都知道c語言主函數中交換兩個變量的值,可以通過以下代碼實現:
#include<stdio.h>
int main()
{
int a=10,b=20,temp;//先定義一個temp
//以下實現兩個變量的交換(具體理解請參照圖一)
temp=a;
a=b;
b=temp;
printf("a=%d,b=%d",a,b);//此時a=20,b=10;
return 0;
}
但是如何通過調用函數實現交換兩個變量的值呢?
首先我們先寫一下主函數
#include<stdio.h>
//調用函數前應先聲明一下被調用函數,此處暫時省略,分析完畢形參後,會寫上正確格式
//主函數
int main()
{
int a=10,b=20;
swap( );//此處正確寫法應加入實參,但是爲了分析,此時暫未寫實參
printf("a=%d,b=%d",a,b);
return 0;
}
//以下爲被調用函數中常見錯誤
//常見錯誤1:
void swap( int m,int n )//接收a和b的值
{
int temp=m;
m=n;
n=temp;
}
//此處錯誤在於,此處爲值傳遞,被調函數swap中交換了m和n的值,並未交換主函數中a,b的值,所以a和b輸出結果仍然爲a=10,b=20;具體參考下圖
//常見錯誤2:
void swap( int *m,int* n )//接收a和b的地址
{
int *temp=m;//定義一個指針temp,把指針m中的地址賦給指針temp
m=n;
n=temp;
}
//此處錯誤在於,swap中實現了,兩個指針m和n指向的交換,但是並未對主函數中的a和b進行操作,所以輸出結果依然爲a=10,b=20;具體參考下圖
//正確寫法如下:
void swap( int *m,int* n )//接收a和b的地址
{
int temp=*m;;//定義一個整形變量temp,然後把指針m指向的a中的值,賦給temp,此處實現了對主函數中a的操作
*m=*n;
*n=temp;
}
//從上面即可知道主函數,需要傳遞給swap函數的實參爲a和b的地址,從而主函數調用部分實參和聲明應該寫爲:
#include<stdio.h>
void swap( int *m,int* n );
//上面正確的swap函數應該複製在此處;
int main()
{
int a=10,b=20;
swap(&a,&b);
printf("a=%d,b=%d",a,b);//此時a=20,b=10;
return 0;
}
//以下爲具體操作流程圖: