指向指针数组的指针(动态分配)

Pointer to array of pointers (dynamic allocation)

本文关键字:指针 动态分配 数组      更新时间:2023-10-16

我正在用C 编写纸牌游戏。我有一个 Game 类,可以跟踪球员。我也有一个抽象的基类 player ,从中 person Computer dered。

我想让球员保持一段阵列。在编译时,玩家数量未知。因为有些玩家是人和其他计算机,所以我需要每个播放器指针,并存储在一个数组中,该数组是动态分配的,因为玩家的数量未知,对吗?

由于我对C 是相对较新的,我无法弄清楚语法如何看待这种东西。

对于动态数组,标准库提供std::vector

由于您需要将指针存储为抽象的基本类型而不是对象本身,因此您需要确保正确管理对象的生命值。最简单的方法是存储智能指针(在这种情况下为std::unique_ptr,用于简单的单个所有权),因此当对象从向量中删除时会自动销毁它们。

,您的数组看起来像

// Declaration
std::vector<std::unique_ptr<player>> players;
// Adding players
players.push_back(std::unique_ptr<person>(new person("Human"))); // C++11
players.push_back(std::make_unique<computer>("CPU"));            // C++14 (hopefully)
// Accessing players
for (auto & player : players) {
    player->play();
}

您需要

std::vector<std::shared_ptr<Player>> players;

如果要使用标准库(应该)

否则

Player** players;

您可以使用以下

来声明指针变量
Player *playerptr;

这意味着playerptr是键入播放器的指针。它可以保存播放器的地址以及一组玩家。在C 和C数组中,可以作为指向数组的第一个元素的指针。

根据您的要求,您可以动态分配数组。

playerptr=new Player[20];

这里20是数组的大小。

playerptr=new Player[20]();

第二种语法将将数组中的所有元素初始化为默认值。