查看数组中的指针是否为空(c ++)

时间:2012-10-19 18:12:15

标签: c++ visual-c++ pointers

我有一个指向名为cPlayer的类的指针数组。

编译器:Visual C ++ 2010 Express

初始化

cPlayer* players[MAX_PLAYERS];

Max_Players的定义值为10。 在标题中名为“OnlineData”的类中定义。

检查

if (players[a]){
   // some code here
}

我曾经尝试过,它仍然会在这里找到一些代码

玩家的删除方式如下:

players[player->id]=0;
delete player;

问题

我想检查播放器数组中位置a的项是否有值。我正在使用它来获取播放器列表(碎片整理)

在添加内容时,数组的工作规范是正常的,直到我尝试执行上述操作

5 个答案:

答案 0 :(得分:9)

初始化指向空指针的指针,可以这样做:

cPlayer* players[MAX_PLAYERS] = {};

答案 1 :(得分:7)

要初始化您将使用的全局或本地数组:

cPlayer* players[MAX_PLAYERS] = {};

但是,由于您的数组是类成员,因此无法执行此操作(直到C ++ 11引入了类内初始化,但VS2010不支持此功能)。相反,你必须编写代码,在构造函数体(或init函数或其他)中单独初始化每个成员:

struct S {
    cPlayer *players[MAX_PLAYERS];

    S() {
        for (int i=0; i<MAX_PLAYERS; ++i) {
            players[i] = NULL;
        }
    }
};

或者比使用显式循环更好的方法是使用<algorithm>中的内容,例如std::fillstd::fill_n

std::fill_n(players, MAX_PLAYERS, NULL);

答案 2 :(得分:3)

初始化数组: - cPlayer * players [MAX_PLAYERS] = {};

答案 3 :(得分:1)

将数组的所有值初始化为NULL(在<cstdlib>处找到)。然后,当您想要为数组的其中一个位置指定值时,请写入:players[i]=new cPlayer(...)。要检查排名a是否为空,只需检查players[a]==NULL

答案 4 :(得分:0)

使用

std::fill_n(players, 10, 0)

将所有成员初始化为0 ..