深入理解數據結構中函數參數的傳遞:按值傳遞,按引用傳遞


  最近在看數據結構的書,剛剛入門看的有點吃力,對其中各種操作的函數參數傳遞參數的方式一頭霧水(學c的時候感覺參數傳遞理解的還行),看各種博客上的算法實現傳遞的參數一會SqList &L,一會SqList L,一會SqList *L。但是很少博主對其作特別說明。我這種入門級選手看的十分痛苦。如是決定好好研究一下函數參數傳遞的方式。

  c語言中函數參數傳遞有兩種:按值傳遞和按地址傳遞。按值傳遞(如void change(int a,intb))時函數形參的改變不會作用於實參上面,也就是說我們在調用的函數中該變量形參的值,但是在函數外部對應得實參的值是不會改變的。而按地址傳遞(如void change(int *a,int *b)),我們在函數內部改變形參的值會引起實參的改變,因為此時我們傳進來的地址(改地址所指向的才是我們參數的實際值),而地址該變了必然會使其指向不同的值,所以實際值也會改變。

void main(){
  int m=2,n=4;
  void change1(int a,int b){
    int temp=a;
       a=b;
       b=temp;
  }
  void change2(int *a,int *b){
    int *temp;
    tem=a;
    a=b;
    b=temp;
  }
change1(m,n);
  change2(&m,&n); }

  結果十分明顯,留給大家自己運行看看。另外還有一種SqList &L這又是什么呢?這是c++才有的叫按引用傳遞參數。他的代碼寫法跟change1類似,只是在change1的形參上面加上&而已,但其效果是可以改變a,b值交換的。這種寫法只有c++才能c這樣寫是不合法的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM