传址调用就是传地址调用,也称为传引用调用。函数的另外一种调用方式是传值调用。
传值调用建立参数的一份拷贝并把它传给调用的函数,在调用函数中修改参数值的拷贝不影响原始的变量值;传引用调用允许调用函数修改原始变量的值。
如何写一个函数来交换两个整数变量呢?
例:
void swap(int x, int y)
{
int t;t = x;x = y;y = t;
}
显然是不行的。 swap 并不知道参数的实际地址。
例:#include <stdio.h>
void swap(int *px, int *py)
{
int t;
t = *px; *px = *py; *py = t;
}
int main(int argc, char *argv[])
{
int a=5, b=3;
swap(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
你需要告诉 swap,参数 a 和 b 的地址才能完成真正的交换操作。
例:#include <stdio.h>
void swap(int *px, int *py)
{
int t;
printf("px=%p\n", px);
printf("py=%p\n", py);
t = *px; /* 将地址 px 指向的值保存到 t */
*px = *py; /* 将地址 py 指向的值直接保存到地址 px */
*py = t; /* 将值 t 直接保存到地址 py */
}
int main()
{
int a=5, b=3;
printf("a address is %p\n", &a);
printf("b address is %p\n", &b);
swap(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
程序运行结果如下:
a address is 0028FF3C
b address is 0028FF38
px=0028FF3C
py=0028FF38
3 5
注意:a 和 b 的地址由操作系统动态分配,未必和上面的结果一致。
定义函数,求两个浮点数的之和
如果要求变一下:定义函数,求两个浮点数的之和、差
可以分别定义两个函数来完成,可以再定义一个新的函数。但如果只能使用一个函数呢? 一个函数只能有一个返回值,如果同时提供两个返回值呢?
在C语言中,可以通过地址传递来解决。
1>传址调用返回多个参数
2 >传址调用的另外的一个作用就是避免数组的复制(或移动)。