1

我正在尝试学习 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;
}

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

抱歉,如果以前已经回答过这个问题,但我找不到。谢谢

4

3 回答 3

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

在 C++ 中,&通过引用而不是值传递参数的方式。它不表示地址。

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

于 2012-12-25T19:58:01.747 回答
3

您需要带上您最喜欢的 C++ 书籍并阅读参考资料

在这份声明中

int CDummy::isitme (CDummy& param)

param不是一个地址,你似乎相信。这是一个参考。

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

什么是 C++ 中的引用变量?

C++中的指针变量和引用变量有什么区别?

但在我看来,一本书/指南/教程将是一个更好的起点。

于 2012-12-25T19:58:17.110 回答
1

一元&返回其操作数的地址。并且在参数中使用时,表示通过引用传递。

于 2012-12-25T19:59:18.630 回答