标签:改变 after int 失败 参与 temp 效果 值类型 区别
前置++和后置++的区别 }
//在函数内部,交换a和b的值
//实际测试结果失败,并没有交换。
//原因:C语言中,函数调用时,实参传递给形参实际是传值调用。也就是说,实参x和y将自己的值拷贝一份传给形参a和b,在子函数swap中实际交换的是a和b,而不是实参x和y,因为函数执行完后,x和y的值依然,并没有被交换。
int swap(int a,int b)
{
int swap;
temp = a ;
a = b;
b = temp;
return 0;
}
______________________________________________
//在函数内部,交换a和b的值。
//测试结果:交换成功。
//原因:c语言函数调用时,一直都是函数调用。也就是实际传递的一直都是实参的拷贝。但是本函数中形参和实参都并不是x和y,而是x和y的地址值。这样让我们在函数中通过间接访问*p的方式,在函数内访问到了函数外面调用时的实参。
#include<stdio.h>
int main(void)
{
int x,y;
x = 5;
y = 3;
printf("before swap: x = %d,y = %d.\n",x,y);
swap_pointer(&x,&y);
printf("after swap: x = %d,y = %d.\n",x,y);
}
int swap_pointer(int *p1,int *p2)
{
int temp;
temp= *p1; //实际调用时,p1得到的实参是x的地址&x, *p1代表的就是x
*p2 = *p2;
*p2 = temp;
return 0 ;
}
标签:改变 after int 失败 参与 temp 效果 值类型 区别
原文地址:https://blog.51cto.com/14762640/2485069