我正在为我的 C++ 作业解决一个涉及指针的问题。我不要求任何人做我的工作,而只是帮助理解问题。
问题是写一个函数
void sort2(double* p, double* p) //First off I am assuming the second "p" is a typo and should be a q
此函数将接收两个指针并对它们指向的值进行排序。例如,如果您调用 sort2(&x, &y)
,则在调用后 x <= y。
我想知道的是,如果指针已经被函数取消引用,我是否只是比较 x 和 y 而不是它们的内存地址?如果不是,我该如何比较内存地址?
最佳答案
您正在传递 2x double
变量的地址,以便 sort2()
函数可以交换源中的值。
这样,当这样调用排序函数时:
sort2(&x, &y)
该函数可以访问调用者的x
和y
内存地址,并在必要时交换存储在那里的值。
但是,如果该函数只是按值 采用双参数,即
void sort2(double p1, double p2)
然后,尽管该函数仍然可以比较和交换值,但是 sort2()
无法将两个新值都传递回其当前签名的调用方,因为 p1
和 p2
按值复制到堆栈上,并在函数返回时丢失。
排序函数通过取消引用来访问指针变量的值,例如
if (*p1 > *p2) {
// swap / sort etc.
double swap = *p2;
*p2 = *p1;
*p1 = swap;
}
是的,你是对的,第二个 p
几乎可以肯定是一个拼写错误。
关于c++ - 更好地解释 C++ 指针函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21692472/