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


 

  最近在看數據結構的書,剛剛入門看的有點吃力,對其中各種操作的函數參數傳遞參數的方式一頭霧水(學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這樣寫是不合法的。

 

原文地址:https://www.cnblogs.com/wenyi1992/p/5880334.html


免責聲明!

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



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