#include#include void Exchg1(int x, int y) { printf("x地址 = %p, y地址 = %p.n", &x, &y); int tmp; tmp = x; x = y; y = tmp; printf("x = %d, y = %d.n", x, y); } int main(void) { int a = 4; int b = 6; printf("a的地址%pn", &a); printf("b的地址%pn", &b); Exchg1(a, b); printf("a = %d, b = %d.n", a, b); printf("a的地址%pn", &a); printf("b的地址%pn", &b); return 0; }
Exchg1为值传递,形参x、y为传入参数的复制值
a的地址000000000061fe1c b的地址000000000061fe18 x地址 = 000000000061fdf0, y地址 = 000000000061fdf8. x = 6, y = 4. a = 4, b = 6. a的地址000000000061fe1c b的地址000000000061fe18地址传递
#include#include void Exchg2(int *px, int *py) { printf("px的值%pn", px); printf("py的值%pn", py); int tmp = *px; *px = *py; *py = tmp; printf("*px = %d, *py = %d.n", *px, *py); } int main(void) { int a = 4; int b = 6; printf("a的地址%pn", &a); printf("b的地址%pn", &b); Exchg2(&a, &b); printf("a = %d, b = %d.n", a, b); printf("a的地址%pn", &a); printf("b的地址%pn", &b); return 0; }
打印语句如下
a的地址000000000061fe1c b的地址000000000061fe18 px的值000000000061fe1c py的值000000000061fe18 *px = 6, *py = 4. a = 6, b = 4. a的地址000000000061fe1c b的地址000000000061fe18引用传递(C不存在引用传递,C++中试验)
#include#include void Exchg3(int &x, int &y) { printf("x地址 = %p, y地址 = %p.n", &x, &y); int tmp = x; x = y; y = tmp; printf("x地址 = %p, y地址 = %p.n", &x, &y); printf("x = %d, y = %d.n", x, y); } int main(void) { int a = 4; int b = 6; printf("a的地址%pn", &a); printf("b的地址%pn", &b); Exchg3(a, b); printf("a = %d, b = %d.n", a, b); printf("a的地址%pn", &a); printf("b的地址%pn", &b); return 0; }
与值传递中唯一变化的地方在于形参中添加取地址符号&,形参x、y的地址与a、b的地址相同
a的地址000000000061fe1c b的地址000000000061fe18 x地址 = 000000000061fe1c, y地址 = 000000000061fe18. x地址 = 000000000061fe1c, y地址 = 000000000061fe18. x = 6, y = 4. a = 6, b = 4. a的地址000000000061fe1c b的地址000000000061fe18



