指针做传参时值传递和地址传递的区别
前些天一直在看指针这块,遇到了一个问题,一直没有看透.后面通过各种打印地址或值输入,最终弄懂,为防止忘记,特在此记录下,同时也给需要的朋友一点指点,如果有不对的地方,还请朋友们指出,并相互交流下,谢谢.
问题:输入的两个整数按大小顺序输出。用函数处理,而且用指针类型的数据作函数参数。
解题:指针值传递
swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
main()
{
int a,b;
int *pointer_1,*pointer_2;
printf("please input two number:\n");
scanf("%d%d",&a,&b);
pointer_1=&a;
pointer_2=&b;
swap(pointer_1,pointer_2);
printf("\na=%d,b=%d\n",a,b);
}
输出:
please input two number:
1 3
a=3,b=1
解析:输入原理如下
上面指针值传递是正确的,下面指针传递又如何呢?,看看......
解题:指针地址传递
swap(int *p1,int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}
输出:
please input two number:
1 3
a=1,b=3
????????
我们不是交换地址了吗?怎么值会没有改变呢?
解析:输出原理又如下,将与上面的值传递是有差别的.
有了上面的简易分析流程,我们能够比较直观的了解指针值传递和指针地址传递的不同。