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

来源:互联网 发布:淘宝全球购 买手直播 编辑:程序博客网 时间:2024/05/16 08:45

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

示例代码二: 

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

示例代码三: 

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

 

0 0
原创粉丝点击