更好地解释C指针功能?

我正在为我的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双变量的地址,因此sort2()函数可以在源处交换值.

这样,当调用sort函数时,如下所示:

sort2(&x,&y)

函数可以访问调用者的x和y内存地址,并在必要时交换存储在那里的值.

但是,如果函数只是按值取双参数,即

void sort2(double p1,double p2)

那么,虽然函数仍然可以比较和交换值,但是sort2()无法通过其当前签名将新值传递回其调用者,因为p1和p2被值复制到堆栈上并且将函数返回时丢失.

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

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

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...