如何在 C++ 中取消引用指针对象?
How to dereference pointer object in C++?
我在 运行 时遇到错误?
cout << *head << endl;
为什么我们不能取消引用对象指针?
就像我们在 int 数据类型中做的一样:
int obj = 10;
int *ptr = &obj;
cout << *ptr << endl; //This will print the value 10 by dereferencing the operator!
为什么不在对象中?
#include <iostream>
using namespace std;
class Node
{
public:
int data;
Node *next;
Node(int data)
{
this->data = data;
this->next = NULL;
}
};
int main() {
Node N1(10);
Node *head = &N1;
cout << &N1 << endl;
cout << head << endl;
cout << *head << endl;
cout << &head << endl;
}
您取消引用指针这一事实是一个转移注意力的问题:std::cout << N1 << endl;
出于同样的原因将无法编译。
您需要为您的 Node
class(在全局范围内)实现 std::ostream& operator<<(std::ostream& os, const Node& node)
,您可以在函数体中按照
{
os << node.data; // print the data
return os; // to enable you to 'chain' multiple `<<` in a single cout statement
}
您得到的错误不是您不能取消引用对象指针,而是您没有指定如何打印它。指向标准库未知类型的指针可以以相同的方式打印,无论它们指向什么,但是对于实际对象和对象引用,您必须指定要在屏幕上显示的内容。为此,您可以为 class 重载 <<
运算符,例如:
#include <ostream>
std::ostream& operator<<(std::ostream &os, const Node &node) {
return os << "Node(" <<node.data << ")";
}
我在 运行 时遇到错误?
cout << *head << endl;
为什么我们不能取消引用对象指针?
就像我们在 int 数据类型中做的一样:
int obj = 10;
int *ptr = &obj;
cout << *ptr << endl; //This will print the value 10 by dereferencing the operator!
为什么不在对象中?
#include <iostream>
using namespace std;
class Node
{
public:
int data;
Node *next;
Node(int data)
{
this->data = data;
this->next = NULL;
}
};
int main() {
Node N1(10);
Node *head = &N1;
cout << &N1 << endl;
cout << head << endl;
cout << *head << endl;
cout << &head << endl;
}
您取消引用指针这一事实是一个转移注意力的问题:std::cout << N1 << endl;
出于同样的原因将无法编译。
您需要为您的 Node
class(在全局范围内)实现 std::ostream& operator<<(std::ostream& os, const Node& node)
,您可以在函数体中按照
{
os << node.data; // print the data
return os; // to enable you to 'chain' multiple `<<` in a single cout statement
}
您得到的错误不是您不能取消引用对象指针,而是您没有指定如何打印它。指向标准库未知类型的指针可以以相同的方式打印,无论它们指向什么,但是对于实际对象和对象引用,您必须指定要在屏幕上显示的内容。为此,您可以为 class 重载 <<
运算符,例如:
#include <ostream>
std::ostream& operator<<(std::ostream &os, const Node &node) {
return os << "Node(" <<node.data << ")";
}