#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 需要修改指针对应的值才行:
当使用指针类型作为参数类型时,函数内只能通过指针实现指针指向的数据的交换,而不能实现指针自身地址的交换。这个道理和值参不能实现函数内外值交换是一个道理。所以必须改为:
void swap(int *p1,int *p2)
{
int p = *p1;
*p1 = *p2;
*p2 = p;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: