gpt4 book ai didi

c++ - 使用指针交换整数

转载 作者:行者123 更新时间:2023-11-30 20:06:15 26 4
gpt4 key购买 nike

考虑这个函数:

void swap (int *p,int *q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}

交换(4, 5)

输出:

5    4

我知道这是使用指针交换两个整数的正确方法,正如书中提到的。但里面究竟发生了什么?这很令人困惑。考虑这个函数,其中步骤 *p=*q 被 p=q 替换,即删除了间接运算符 * 。

void swap (int *p,int *q)
{
int temp;
temp=*p;
p=q;
*q=temp;
}

现在,会发生什么?在这种情况下,我得到的输出

交换(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com