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