考虑一下功能:

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下找到的相同条目。现在您有两个盒子,里面有不同的数字。但是您的剪贴板包含两个相同的条目,并且都将您定向到同一框。现在,您无法找到其中一个框(剪贴板上没有指向您的条目),并且每当您查找pq时,最终都将查找同一框。

(值得注意的是,此剪贴板仅用于执行此特定功能,此后它会被丢弃。对函数作为参数传入的指针所做的更改在函数完成后不会生效。但是在开始担心范围之前,我会先弄清楚其他概念。)

关于c++ - 使用指针交换整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26122135/

10-17 02:42