更好地解释C++指针函数?

Sam*_*son 6 c c++ pointers

我正在研究涉及指针的C++作业的问题.我不是要求任何人做我的工作,而只是帮助理解这个问题.

问题是编写一个函数

void sort2(double* p, double* p) //First off I am assuming the second "p" is a typo and       should be a q
Run Code Online (Sandbox Code Playgroud)

此函数将接收两个指针并对它们指向的值进行排序.例如,如果在调用sort2(&x, &y)后调用x <= y.

我想知道的是,如果指针已被函数取消引用,我只是比较x和y而不是它们的内存地址吗?如果不是我如何比较内存地址?

Stu*_*tLC 4

您正在传递 2x 变量的地址double,以便该sort2()函数可以在源处交换值。

这样,当像这样调用排序函数时:

sort2(&x, &y)
Run Code Online (Sandbox Code Playgroud)

如果需要,该函数可以访问调用者的内存地址xy并交换存储在那里的值。

但是,如果该函数仅按值采用双参数,即

void sort2(double p1, double p2)
Run Code Online (Sandbox Code Playgroud)

然后,尽管该函数仍然可以比较和交换值,但无法将sort2()两个新值及其当前签名传递回其调用者,因为p1p2是按值复制到堆栈上的,并且在函数执行时将丢失返回。

排序函数通过取消引用指针变量来访问它们的值,例如

if (*p1 > *p2) {
   // swap / sort etc.
   double swap = *p2;
   *p2 = *p1;
   *p1 = swap;
}
Run Code Online (Sandbox Code Playgroud)

是的,你是对的,第二个p几乎肯定是一个错字。