函数调用中,实参的数据和形参对应传递,有两种传递方式:
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 地址传递,实参被改变
请按任意键继续. . .
*/