您的位置:首页 > 编程语言 > C语言/C++

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

2014-03-24 12:39 155 查看

----------------------
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时,进行的只是简单地值传递,只是把a、b的值分别赋值给了x、y,之后在Exchg1函数体内再也没有对a、b进行任何操作了。交换的只是x、y变量的值,对变量a、b的值没有影响。所以调用Exchg1后变量a、b的值并没有交换。

示例代码二:

  #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函数时,进行的是地址传递,是把变量a、b的地址分别赋值给了指针变量px、py,这时对*px、*py的操作也就是对a、b变量本身的操作了。所以,交换*px、*py的值也就是交换变量a、b的值,调用Exchg2后,变量a、b的值交换。

示例代码三:

  #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培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: