C++ 函数指针和地址

标签 c++ reference

我正在尝试学习 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++ 中,& 表示 pass the parameter by reference而不是按值(value)。它不表示地址。

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

关于C++ 函数指针和地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14033596/

相关文章:

c++ - Emacs 为每个连续的行缩进一个额外的级别

c++ - 将 C++ 引用包装到 C API 中

c++ - 当定义为模板参数时,编译器如何推断数组大小?

c++ - 制作变量列表而不复制它们

python - 如何从不同的子模块导入一个子模块?

c++ - 如何处理抽象对象的返回

c++ - const 变量的值在常量表达式中是否可用,取决于变量类型

C++ 仅使用矩阵按深度排序。可能的?

c++ - CMake 包支持 - 未找到包含和库

PHP 对静态变量的引用