如何通過調用函數交換兩個變量的值及常見誤區

大家都知道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;

}

//以下爲具體操作流程圖:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章