学习目标
掌握值传递和指针传递的区别
学习内容
值传递
1.值传递的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值反向的传送给实参。
2.在函数调用过程中,形参值的变化不会影响到实参值的变化
void swap(int x, int y)
{
int temp;
temp = x;
x = y;
temp = x;
peintf("x:%d y:%d", x, y);
}
int main(void)
{
int a, b;
printf("please input tow number;");
scanf("%d %d", &a, &b);
if(a < b)
{
swap(a,b);
}
peintf("a:%d,b:%d", a, b);
return 0;
}
此实例 为什么不能通过swap()函数将ab的值调换呢?
在mian函数中判断a < b 执行swap()函数 直接将实参传到形参上
但在swap执行完毕后 属于swap的栈全部清除 同时ab并没有被改变
指针传递
1.在函数调用过程中形参指针本身值的变化不会影响到实参指针本身值的变化,这个和值传递是相同的
2.通过形参指针可以修改实参指针所指向的储存单元中的值。
void swap(int *p1, int *p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = *p1;
}
int main(void)
{
int a, b, *pa, *pb;
printf("please input tow number;");
scanf("%d %d", &a, &b);
pa = &a;
pb = &b;
if(a < b)
{
swap(pa,pb);
}
peintf("a:%d,b:%d", a, b);
return 0;
}
在指针传递中用指针作为桥梁,搭建形参到实参的通道。
形参通过指针直接改变原a,b 中的值。