考虑一下功能:
void swap (int *p,int *q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}
swap(4 , 5)
输出:
5 4
我知道这是使用指针交换两个整数的正确方法,如书中所述。但是那里到底发生了什么?这很令人困惑。考虑一下此函数,其中步骤* p = * q被p = q替换,即间接操作符*被删除。
void swap (int *p,int *q)
{
int temp;
temp=*p;
p=q;
*q=temp;
}
现在,会发生什么?在这种情况下,我得到的输出
swap(4 , 5)
输出:
4 4
最佳答案
将int
视为其中带有数字的框,并将指针视为剪贴板上的条目,告诉您要查找哪个框。
当你做
*p = *q;
您正在列表上查找要用于
p
的框,以及用于q
的框;那么您要查看q
框中的数字,然后将其复制到p
框中。您的剪贴板上还有两个单独的框和两个单独的条目。只是两个盒子中的数字相同。但是当你这样做
p = q;
您根本没有触摸盒子。您只在更改剪贴板。您正在查找应用于
q
的框,然后在剪贴板上清除p
的条目,并将其替换为在q
下找到的相同条目。现在您有两个盒子,里面有不同的数字。但是您的剪贴板包含两个相同的条目,并且都将您定向到同一框。现在,您无法找到其中一个框(剪贴板上没有指向您的条目),并且每当您查找p
或q
时,最终都将查找同一框。(值得注意的是,此剪贴板仅用于执行此特定功能,此后它会被丢弃。对函数作为参数传入的指针所做的更改在函数完成后不会生效。但是在开始担心范围之前,我会先弄清楚其他概念。)
关于c++ - 使用指针交换整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26122135/