swap函数中的交换,主要是这三种情况
第一种
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
表示的是把指针所指向的系统空间的值发生交换
所以这个函数交换主函数中也会改变
第二种
void swap(int *a, int *b)
{
int *temp = a;
a = b;
b = temp;
}
这个函数中,交换的只是形参指针中指向
实参,系统空间都没发生变换 所以主函数中的值不会交换
第三种
void swap(int &a, int &b)
{
int temp = a;
a=b;
b = temp;
}
这个函数中先是把地址传进去,表示跟主函数中的变量共用一个空间
所以这个值交换了就代表系统空间中的值交换了
所以这个主函数中的值肯定是会交换的
这里有一些易混淆的点
void swap(int *&a, int *&b)
{
int *temp = a;
a = b;
b = temp;
}
这个我们可以看成是第二种情况,只是指针的指向发生变化
系统中的地址和空间没有发生变化
void swap(int *&x, int *&y)
{
int temp = *y;
*y = *x;
*x = temp;
}
这个其实我们也可以看成第一种情况,把先是把地址传进去
然后是让指针指向的值,也就是系统的值发生交换
主函数中的值肯定是也会发生交换
其实吧,主要就是看系统里的那个系统空间的值有没有改变
如果有主函数中的值也就是系统里的值,会发生变化
以上都是个人对这个swap函数交换和指针的理解
这篇文章以互相学习为主,有什么错的还望告知,谢谢啦