对于函数参数的传递机制有:值传递机制,地址传递机制小小总结下,有不对的地方希望指出来。


(复制传递方式)值传递方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束以后,形参单元被释放,实参单元任然保留并维持原值。
 特点:1.形参和实参占用不同的内存单元
  2.单向传递性


地址传递机制:方式:函数调用时,先将数据的存储地址作为参数传递给形参
 特点:1.形参与实参占用相同的内存单元
  2.双向传递性
  3.实参和形参必须是地址常量或变量,获得变量的存储地址有:使用取地址符号,使用指针变量,数组名称,函数名称。


下面贴代码部分:
 数值传递:
  void swap(int x,int y)//注意形参
  {
   int mid = 0;//初始化
   mid=x;x=y;y=mid;
  }
  void main()
  {
   int x=3,y=5;
   printf("x:%d,y:%d\n",x,y);
   swap(x,y);
   printf("x:%d,y:%d\n",x,y);
  }
 打印结果为:x:3,y:5 结果并未变化,因为只有main函数传值给被调函数参数,而被调函数运行结束,释放内存空间,此过程只具有单向传递性。很多人会问,若是函数加上返回值,补充一点,函数返回值是可以利用的,但是参数本身在被调函数运行结束后就释放了,它的作用域只是在它自己。

 数值传递:
  void swap(int *x,int *y)//注意形参
  {
   int mid = 0;//初始化
   mid=*x;*x=*y;*y=mid;
  }
  void main()
  {
   int x=3,y=5;
   printf("x:%d,y:%d\n",x,y);
   swap(&x,&y);
   printf("x:%d,y:%d\n",x,y);
  }

 打印结果为:x:5,y:3 结果发生改变,原因很简单,具有双向传递性。