用指针交换地址然后排两个数的顺序

来源:百度知道 编辑:UC知道 时间:2024/06/08 14:46:53
#include<stdio.h>
void main()
{
void swap(int p1,int p2);
int a,b;
int *pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if(a<b)swap(pointer_1,pointer_2);
else printf("%d%d",a,b);
}
void swap(int p1,int p2)
{
int temp;
temp=p1;
p1=p2;
p2=temp;
printf("%d%d",*p1,*p2);
}
为什么我在调试的时候不行啊!不知道错在哪!想请教老师帮忙一下!指出我错在哪了!

参考如下:
  #include<stdio.h>
  void main()
  {
  void swap(int *,int *);
  int a=3,b=5;
  int *p1=&a,*p2=&b;
  swap(p1,p2);
  printf("a=%d,b=%d\n",a,b);
  printf("*p1=%d,*p2=%d\n",*p1,*p2);
  
  }
  
  void swap(int *m,int *n)
  {
  int *c;
  c=m;m=n;n=c;
  printf("*m=%d,*n=%d\n",*m,*n);
  }
  
  运行结果为:*m=5,*n=3
  a=3,b=5
  *p1=3,*p2=5
  解释:在swap函数中定义了一个指针变量c,交换的是指针m和n的值,也就是说交换后m和n交换了方向,即交换后m指向了b,n指向了a,所以结果*m和*n为b和a内存放的值,但是此时实参p1和p2并没有改变,他们仍旧指向a和b,a和b里面的内容也没有发生改变。

那个pointer_1,pointer_2是指针吧?那为什么你下面的void swap(int p1,int p2)
{
int temp;
temp=p1;
p1=p2;
p2=temp;
printf("%d%d",*p1,*p2);
}
中(int p1,int p2)感觉参数类型是实型呢?

因为swap函数是值传递的,所以不会改变p1和p2的值,可以考虑使用引用参数
void swap(int &p1,int &p2)

void swap(int *p1,*int p2)
//pointer_1和2都是地址,用p1接收pointer_1地址,p2接收pointe