请问为什么这里第二行的输出为x=50 y=100?新手求助

#include
using namespace std;
void swap(int* p1, int* p2)
{
int* p;
p = p1;
p1 = p2;
p2 = p;
}
void main(void)
{
int x = 50, y = 100;
cout << "x=" << x << '\t' << "y=" << y << endl;
swap(&x, &y);
cout << "x=" << x << '\t' << "y=" << y << endl;
}

形参p1和p2与X和Y变量无关,虽然起初p1与x指向同一个地址,但是是属于两个变量名,但是你只改变了p1指向的地址,而x指向的地址不变,且地址里存的值也不变,所以x不会变。
如果你在swap末尾加上(*p2=101;)你会发现x=101.这是因为交换p1和p2后,p2指向的地址以及和X指向的地址一样,改变该地址的值,x也会随着变化。
至于如何实现swap,上面解释的很清楚。

用pritnf试试,还有,主函数的返回值要是0

int main(){
    return 0;
}

然后,那个swap最好不要用指针,用地址符比较好,指针容易re

交换x,y的值。
注意指针漂移
用‘&’做,不会漂移。跟printf和cout没关系!
#include
using namespace std;
void swap(int &p1, int &p2)
{
int p;
p = p1;
p1 = p2;
p2 = p;
return;
}
int main(void)
{
int x = 50, y = 100;
cout << "x=" << x << '\t' << "y=" << y << endl;
swap(x, y);
cout << "x=" << x << '\t' << "y=" << y << endl;
return 0;
}

这个错误是在swap函数中交换指针的地址,而swap函数的参数是一级指针,如果你想交换值可以用引用的方式,如果想交换指针的地址可以用二级指针