函数调用中,实参的数据和形参对应传递,有两种传递方式:
1.值传递(只传送值,实参不做改变)
2.地址传递(传送地址,实参被改变)
# include <stdio.h> void swap(int, int); int main(void) { int x = 10, y = 20; printf("(1)x=%d y=%d\n", x, y); swap(x, y); //调用函数swap printf("(4)x=%d y=%d\n", x, y); return 0; } void swap(int a, int b) //void:没有返回参数 { int t; printf("(2)a=%d b=%d\n", a, b); t=a; a=b; b=t; printf("(3)a=%d b=%d\n", a, b); } /* 结果: (1)x=10 y=20 (2)a=10 b=20 (3)a=20 b=10 (4)x=10 y=20 值传递,只传送值,实参不做改变 请按任意键继续. . . */
# include <stdio.h> void swap(int *, int *); //形参是指针变量 int main(void) { int x = 30, y = 20; printf("(1)x=%d y=%d\n", x, y); swap(&x, &y); printf("(4)x=%d y=%d\n", x ,y); /* 通过传递地址值 在被调用函数中 直接改变调用函数中的变量的值*/ return 0; } void swap(int *a, int *b) { int t; printf("(2)a=%d b=%d\n", *a, *b); t = *a; //*a :取a中的地址所指向的空间的值 *a = *b; *b = t; printf("(3)a=%d b=%d\n", *a, *b); } /*结果: (1)x=30 y=20 (2)a=30 b=20 (3)a=20 b=30 (4)x=20 y=30 地址传递,实参被改变 请按任意键继续. . . */