传值调用和传址调用的区别(附例子)
来源:信奥一本通-函数
【传值调用】
传值调用将实参的数据(而不是地址)传给了形参,
在被调用的函数中,形参值改变了,但是不影响主调函数的实参值。
参数传递方向是由实参向形参单向传递。
如下交换a和b值的函数:
调用函数后,因为是传值调用,故仅改变了形参(a和b)的值,
却并未改变实参(c和d)的值,故输出仍为1和2。
#include<stdio.h>
void swap(int a,int b)//a与b交换值的函数,括号内为传值调用
{
int tmp=a;
a=b;
b=tmp;
}
int main()
{
int c=1,d=2;
swap(c,d);
printf("%d %d",c,d);
return 0;
}
【传址调用】
传址调用与传值调用不同,
传址调用是将实参变量的地址传给形参,
(此时形参是指针,即让形参的指针指向实参地址)
改变形参的同时也把实参改变了。
同样也是交换a和b值的函数:
调用函数后,使用的是传值调用,在改变形参(a和b)的值同时,
指针指向实参(c和d)的值,实参也改变了,故输出为2和1。
#include<stdio.h>
void swap(int &a,int &b)//a与b交换值的函数,括号内为传址调用
{
int tmp=a;
a=b;
b=tmp;
}
int main()
{
int c=1,d=2;
swap(c,d);
printf("%d %d",c,d);
return 0;
}