指针并没有进行指针指向的交换,如何解决啊?


#include <stdio.h>

void swap(int *p1, int *p2)
{
    if (*p1 < *p2)
    {
        p1 = &(*p2);
        p2 = &(*p1);
    }
}

void exchange(int *p1, int *p2, int *p3)
{
    if(*p1 < *p2)
        swap(p1, p2);
    if(*p2 < *p3)
        swap(p2, p3);
    if(*p1 < *p3)
        swap(p1, p3);
}

int main()
{
    int a, b, c, *p1, *p2, *p3;

    printf("请输入a,b,c三个数的值:\n");
    scanf("%d%d%d", &a, &b, &c);

    p1 = &a;
    p2 = &b;
    p3 = &c;

    exchange(p1, p2, p3);

    printf("由大到小排序之后为:%d, %d, %d\n", *p1, *p2, *p3);

    printf("a = %d\nb = %d\nc = %d", a, b, c);
    return 0;
}

根据最后返回的结果,指针并没有进行指针指向的交换。倒数第二个printf那里,如果要交换指针指向输出结果,这要怎么解决啊?初学者请教中 !

  • 只交换指针的指向,需要传入指针的指针作为入参才行
  • 另外你的从大到小的交换也是有问题的
  • 帮你修改了一下:
 
 
#include <stdio.h>
 
void swap(int **p1, int **p2)
{
    int *t = *p1;
    *p1 = *p2;
    *p2 = t;
}
 
void exchange(int **p1, int **p2, int **p3)
{
    if(**p1 < **p2)
        swap(p1, p2);
    if(**p2 < **p3)
        swap(p2, p3);
    if(**p1 < **p2)
        swap(p1, p2);
}
int main()
{
    int a, b, c, *p1, *p2, *p3;
 
    printf("请输入a,b,c三个数的值:\n");
    scanf("%d%d%d", &a, &b, &c);
 
    p1 = &a;
    p2 = &b;
    p3 = &c;
 
    exchange(&p1, &p2, &p3);
 
    printf("由大到小排序之后为:%d, %d, %d\n", *p1, *p2, *p3);
 
    printf("a = %d\nb = %d\nc = %d", a, b, c);
    return 0;
}