void change(int& a,int &b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
void change2(int *p, int *q)
{
int ch;
ch = *p;
*p = *q;
*q = ch;
}
void change3(int *p, int *q)
{
int* ch;
ch = p;
p = q;
q = ch;
std::cout << "*p: " << *p << " , *q: " << *q << endl;
//有交换,2, 1,但如果外面调用,就不会改变
// 因为拷贝进去的是指针的副本
//因为这里改变副本,原来的依旧没变
// 而change2(),直接改变副本中的地址解引用的值,但地址还是和原地址一样,所以外面调用还是会改变。
}
int main()
{
int a,b;
std::cout<<"Please input two numbers:"<<endl;
std::cin>>a>>b;
// change(a,b); //有交换,2, 1
//change2(&a, &b); //有交换,2, 1
change3(&a, &b); // 并没有交换,1,2
std::cout<<"After changing:"<<endl;
std::cout<<a<<" "<<b<<endl;
system("pause");
return 0;
}
|