如何访问指针的数组元素
How to access array elements of pointers
如何从我的节点指针数组访问元素?底部的 cout 返回地址"0xb7738ff4"。即使我创建一个构造函数并将每个元素设置为 NULL,我以后也无法修改其中任何一个。
#include <iostream>
using namespace std;
class Node
{
public:
char character;
};
class Tree
{
public:
Node* nodes[26];
};
int main() {
Tree t;
//t.nodes[0]->character = 'a';
cout << """ << (t.nodes[0]) << """;
}
http://ideone.com/XvLme9
t.nodes[0]
返回一个Node*
指针。 您将该指针按原样传递给cout
,这就是为什么它打印内存地址(并且是随机地址,因为您没有初始化数组)。 如果要打印节点的character
,则必须取消引用Node*
指针,就像注释掉的代码所做的那样(这是正确的方法):
t.nodes[0]->character
您只需要确保nodes[0]
返回指向真实Node
对象的有效指针即可:
Tree t;
t.nodes[0] = new Node; // <-- here
t.nodes[0]->character = 'a';
std::cout << """ << t.nodes[0]->character << """ << std::endl;
使用完节点后,不要忘记delete
节点。 Tree
应该有一个析构函数来释放它拥有的节点。
尝试更多类似的东西:
#include <iostream>
#include <stdexcept>
class Node
{
public:
char character;
Node(char c = 0);
};
class Tree
{
private:
Node* nodes[26];
int count;
public:
Tree();
~Tree();
Node* add(char c);
Node* get(int idx);
};
Node::Node(char c)
: character(c)
{
}
Tree::Tree()
: count(0)
{
for (int i = 0; i < 26; ++i)
nodes[i] = NULL;
}
Tree::~Tree()
{
for (int i = 0; i < count; ++i)
delete nodes[i];
}
Node* Tree::add(char c)
{
if (count == 26)
throw std::runtime_error("nodes array is at its max capacity");
Node *node = new Node(c);
nodes[count++] = node;
return node;
}
Node* Tree::get(int idx)
{
if ((idx < 0) || (idx >= count))
throw std::out_of_range("invalid index");
return nodes[idx];
}
int main()
{
Tree t;
t.add('a');
std::cout << """ << t.get(0)->character << """ << std::endl;
}
话虽如此,您应该使用 std::list
或 std::forward_list
而不是编写自己的树类:
#include <list>
int main()
{
std::list<char> l;
l.push_back('a');
std::cout << """ << l.front() << """ << std::endl;
}
或:
#include <list>
class Node
{
public:
char character;
// other things here...
Node(char c = 0);
Node(const Node &src);
Node& operator=(const Node &rhs);
};
Node::Node(char c)
: character(c)
{
}
Node::Node(const Node &src)
: character(src.character)
{
}
Node& Node::operator=(const Node &rhs)
{
character = src.character;
return *this;
}
int main()
{
std::list<Node> l;
l.push_back('a');
std::cout << """ << l.front().character << """ << std::endl;
}
相关文章:
- 删除指针数组 (C++) 中的元素
- 存储指向动态数组元素的指针
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 使用指针访问数组元素时出现意外结果
- 如何获取指针数组中的元素数量?
- C++如何通过超出大小将元素添加到指针数组中
- 整数指针数组的元素是否可以指向整数数组?
- 如何取消引用和打印指针数组的每个元素?
- 在C++中将指针数组的所有元素设置为 nullptr
- 删除 c++ 中指针数组的每个元素所指向的相应元素
- 指针数组.获取指针元素的值
- 如何使用指针更改数组元素
- 通过指针访问数组元素
- 字符指针对象和相应的字符数组元素比较
- 指向数组的指针会更改数组元素的值
- C++如何使用指针来循环移位数组元素
- 取消引用指针数组中的一个元素
- 我怎么知道基类对象的指针数组中元素的类型,它将为派生类分配内存
- 从 C++ 数组元素的指针获取索引的最快方法是什么
- C++:指向对象的指针数组 - 删除元素时程序崩溃>