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

C语言中函数参数的传递的三种形式

2014-03-24 23:59 477 查看
C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。

下面用这三种方式来实现两个变量值的对调。代码一为值传递,代码二为地址传递,代码三为引用传递。

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

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的值并没有交换。

示例代码二:

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的值交换。

示例代码三:

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