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

标签 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

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

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

最佳答案

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

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

sort2(&x, &y)

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

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

void sort2(double p1, double p2)

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

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

if (*p1 > *p2) {
   // swap / sort etc.
   double swap = *p2;
   *p2 = *p1;
   *p1 = swap;
}

是的,你是对的,第二个 p 几乎可以肯定是一个拼写错误。

关于c++ - 更好地解释 C++ 指针函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21692472/

相关文章:

c++ - RayTracer 球面贴图

c - mpz_tdiv_q_2exp 上的 GMP 段错误

c++ - 二进制搜索到达文件中间的方法

c++ - 如何在 C/C++ 中的 unsigned char 数组中生成 n 个随机 1?

c++ - 如何根据类访问特定的 protected 继承成员?

c++ - 使用模板函数对列表容器进行排序

c - 是字 rune 字 ('A' ) 完全等同于十六进制文字 (0x41)

无法将 PathFindExtensionW 输出分配给 WCHAR 数组

c++ - C/C++ 指针作为/在函数中

c - 如何从指针变量计算数组的大小?