C语言指针与地址的问题

#include<stdio.h>
int main()
{
void swap(int *p1,int *p2);
int a,b;
int *pointer_1,*pointer_2;
printf("please enter two integer numbers:");
scanf("%d,%d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if(a<b)
swap(pointer_1,pointer_2);
printf("max=%d,min=%d\n",a,b);
return 0;
}

void swap(int *p1,int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}
这是一个对数如的两个数按大小顺序输出的代码!
在swap函数中,交换的是p1和p2的值,它们俩个是指针变量,分别代表a和b的地址,那么交换它俩就是交换a和b的地址,我想问问交换地址是什么意思可以这样理解吗?假如变量a分配的地址是2000,里面存储了值5,变量b分配的地址是2004,里面存储的是值9,pointer_1是a的地址,也就是2000,pointer_2是b的地址,也就是2004,调用函数后p1的值就是2000,p2的值就是2004,swap函数中交换p1和p2的值后p1的值就是2004,p2的值就是2000,这样交换后pointer_1和pointer_2的值也变了吗?void swap函数并没有返回值,而且swap中的指针变量在函数调用结束后就释放了,那他是怎样使pointer_1和pointer_2的值改变的!swap函数交换地址是像我说的这样交换的吗?不是的话是怎么交换的!谢谢了!

第1个回答  2012-06-25
按你的程序swap pointer_1 和 pointer_2 是没有效果的。
交换两个指针的值
void swap(int **p1,int **p2)
{ int *p;
p = *p1;
*p1 = *p2;
*p2=p;
}
swap(&pointer_1,&pointer_2);
第2个回答  2012-06-25
当然不是这样交换的,首先swap正确的实现方式是:
void swap(int *p1,int *p2)
{
int v;
v=*p1;
*p1=*p2;
*p2=v;
}

你写的swap函数不能达到这个效果,原因是在main函数中调用swap时传递的参数pointer_1和pointer_2,在swap函数中被不会被改变,也就是说调用swap之后,pointer_1指向的还是a的地址,在swap函数中的参数p1和p2的值改变,并不会影响pointer_1和pointer_2,因为传的参数是地址的值,而不是指向地址的指针。
第3个回答  2012-06-25
你想的是对的,交换函数写的不对,改一下:
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
才能实现交换功能,相信你能够理解吧。本回答被网友采纳
第4个回答  2012-06-25
你swap函数实现的功能是要交换a和b的值吗;地址是计算机分配的怎么换,你只能换在这个地址里的值,如果是这样的话你的swap函数写的就不对。
相似回答