C 功能指针和地址

C++ function pointers and addresses

本文关键字:地址 指针 功能      更新时间:2023-10-16

我正在尝试学习C ,并在我使用的教程中遇到了这个令人困惑的例子,也许有人可以为我澄清这一点。

以下代码来自教程。我放了一个"标签"(如果您将 // <---)指示我混淆的零件。

#include <iostream>
using namespace std;
class CDummy {
  public:
    // signature: accepts an address 
    int isitme (CDummy& param);
};
// actual function that accepts an address passed in from main set to
// the param variable
int CDummy::isitme (CDummy& param) // <--- 1
{

现在,这是令人困惑的部分到来的地方。我正在接受地址变量???地址是否已经通过?

  if (&param == this) return true; // <--- 2
  else return false;
}
int main () {
  CDummy a;
  CDummy* b = &a;
  // passes in the class 
  if ( b->isitme(a) )
    cout << "yes, &a is b";
  return 0;
}

现在在下面的代码中,对我有意义

#include <iostream>
using namespace std;
class CDummy {
  public:
    int isitme (CDummy *param);
};
int CDummy::isitme (CDummy *param) // <--- 1
{

这部分很有意义。param是一个指针,我正在比较a类的指针与B类指针。

  if (param == this) return true; // <--- 2
  else return false;
}
int main () {
  CDummy a;
  CDummy *b = &a;
  // pass in the address.
  if ( b->isitme(&a) )
    cout << "yes, &a is b";
  return 0;
}

哪个代码样本正确?从某种意义上说,这是这样做的首选方法,因为它们都起作用。另外,为什么我在第一个示例中进行地址的地址?

很抱歉是否以前回答过,但我找不到。谢谢

int CDummy::isitme (CDummy& param) // <--- 1

在C 中,&是指通过参考而不是通过值传递参数。它没有表示地址。

请注意,您可能会看到CDummy & paramCDummy &param。都是一样的。

您需要带上您喜欢的C 书籍并阅读有关参考

在此声明中

int CDummy::isitme (CDummy& param)

param不是您相信的地址。这是一个参考。

您不是第一个被参考声明中使用的&字符误导的人。这个问题之前已经在Stackoverflow上多次问过

C 中的参考变量是什么?

C 中的指针变量与参考变量之间有什么区别?

我认为,书/指南/教程将成为更好的起点。

Unary &返回其操作数的地址。当参数中使用时,它通过参考。

表示通过