黑马程序员_C语言中函数参数的传递的三种形式

来源:互联网 发布:淘宝客成交计入权重吗 编辑:程序博客网 时间:2024/06/04 20:08

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。下面用这三种方式来实现两个变量值的对调。代码一为值传递,代码二为地址传递,代码三为引用传递。

示例代码一(该方法并不能实现两个变量值的对调): 

#include <stdio.h>void Exchg1(int x, int y) { int temp; temp = x; x = y; y = temp; printf("x = %d, y = %d\n", x, y); } int main() { int a = 4,b = 6; Exchg1(a, b); printf("a = %d, b = %d\n", a, b); return(0); } 


输出的结果为: 

x = 6, y=4. 

a = 4, b=6. 

在调用函数Exchg1时,进行的只是简单地值传递,只是把ab的值分别赋值给了xy,之后在Exchg1函数体内再也没有对ab进行任何操作了。交换的只是xy变量的值,对变量ab的值没有影响。所以调用Exchg1后变量ab的值并没有交换。 

示例代码二:

  #include <stdio.h>     void Exchg2(int *px, int *py)      {      int temp = *px;      *px = *py;      *py = temp;      printf("*px = %d, *py = %d.\n", *px, *py);      }      int main()      {      int a = 4;      int b = 6;      Exchg2(&a, &b);      printf("a = %d, b = %d.\n", a, b);      return(0);      } 

输出的结果为: 

*px=6, *py=4. 

a=6, b=4.

在调用Exchg2函数时,进行的是地址传递,是把变量ab的地址分别赋值给了指针变量pxpy,这时对*px*py的操作也就是对ab变量本身的操作了。所以,交换*px*py的值也就是交换变量ab的值,调用Exchg2后,变量ab的值交换。 

示例代码三:

  #include <stdio.h>      void Exchg3(int &x, int &y)      {      int temp = x;      x = y;      y = temp;      printf("x = %d,y = %d\n", x, y);      }      int main()      {     int a = 4;      int b = 6;      Exchg3(a, b);      printf("a = %d, b = %d\n", a, b);      return(0);      }  

输出的结果为: 

x=6, y=4. 

a=6, b=4. 

在调用Exchg3函数时,进行的是引用传递, 是将a、b分别代替了x、y,也就是x、y分别引用了a、b变量。这样函数里面操作的其实就是实参a、b本身了,所以调用Exchg3后,变量a、b的值交换。

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

0 0
原创粉丝点击