深入理解数据结构中函数参数的传递:按值传递,按引用传递

时间:2022-03-20 10:34:02

  最近在看数据结构的书,刚刚入门看的有点吃力,对其中各种操作的函数参数传递参数的方式一头雾水(学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这样写是不合法的。