C 功能指针和地址
C++ function pointers and addresses
我正在尝试学习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 (¶m == 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 & param
或CDummy ¶m
。都是一样的。
您需要带上您喜欢的C 书籍并阅读有关参考。
在此声明中
int CDummy::isitme (CDummy& param)
param
不是您相信的地址。这是一个参考。
您不是第一个被参考声明中使用的&
字符误导的人。这个问题之前已经在Stackoverflow上多次问过
C 中的参考变量是什么?
C 中的指针变量与参考变量之间有什么区别?
我认为,书/指南/教程将成为更好的起点。
Unary &
返回其操作数的地址。当参数中使用时,它通过参考。
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 将地址分配给本地指针后,公共对象的变量将消失
- 为什么指针不写入类的地址?
- CUDA:统一内存和指针地址的更改
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 如何从绝对地址的 C 样式指针创建对C++对象的引用
- 当我在 C++ 中将派生类的指针分配给指针时,地址会更改
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- 如何使用构造函数初始化内存地址(指针变量)?
- 数组基础地址指针
- 如何在不使用返回的情况下从函数获取变量的地址(指针)
- 保存QWidgets的地址/指针
- C++ 读取内存地址/指针和偏移量
- 从存储在 CTreeCtrl 的 LPARAM 中的结构中检索地址/指针 (IXMLDOMNode*) - 不起作用
- 简单的C++地址/指针澄清
- 如何获取成员函数的地址指针
- 当“按引用传递”成为强制传递而不是按地址/指针传递时
- C++ 为什么不是同一个地址(指针)