我在F11测试的过程中,函数中的两个地址交换了 ,韩式main函数中的两个地址没有交换,如何解决?


#include  
swap(int* p1, int* p2)
{
    int* p;
    
    p = p1; p1 = p2; p2 = p;
}
void main()
{
    int a, b; int* pt1, * pt2;
    scanf("%d,%d", &a, &b);
    pt1 = &a; pt2 = &b;
    if (a < b) swap(pt1, pt2);
    printf("%d,%d \n", *pt1, *pt2);
}

想实现pt1指向大的数,pt2 指向小的数 。 我在F11测试的过程中,函数中的两个地址交换了 ,韩式main函数中的两个地址没有交换 。输入3,4 预想中应该输出4,3 .。 结果还是输出3,4

swap 传的指针入参,都是 值传递,在swap里面交换指针,不会影响主函数的指针指向的值。
swap 需要修改指针对应的值才行:

img

当使用指针类型作为参数类型时,函数内只能通过指针实现指针指向的数据的交换,而不能实现指针自身地址的交换。这个道理和值参不能实现函数内外值交换是一个道理。所以必须改为:

void swap(int *p1,int *p2)
{
    int p = *p1;
    *p1 = *p2;
    *p2 = p;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^