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

 

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

posted @ 2021-01-13 10:57  haha-uu  阅读(810)  评论(0编辑  收藏  举报