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

rub*_*rdy 3 c++ pointers visual-c++

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

编译器:Visual C++ 2010 Express

在里面

cPlayer* players[MAX_PLAYERS];
Run Code Online (Sandbox Code Playgroud)

Max_Players是一个定义的值10.在标题中名为"OnlineData"的类中定义.

检查

if (players[a]){
   // some code here
}
Run Code Online (Sandbox Code Playgroud)

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

玩家被删除如下:

players[player->id]=0;
delete player;
Run Code Online (Sandbox Code Playgroud)

我想检查在players数组中位置a的项是否有值.我用它来求助玩家列表(碎片整理)

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

Ben*_*ley 9

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

cPlayer* players[MAX_PLAYERS] = {};
Run Code Online (Sandbox Code Playgroud)


bam*_*s53 7

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

cPlayer* players[MAX_PLAYERS] = {};
Run Code Online (Sandbox Code Playgroud)

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

struct S {
    cPlayer *players[MAX_PLAYERS];

    S() {
        for (int i=0; i<MAX_PLAYERS; ++i) {
            players[i] = NULL;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

或者比使用显式循环更好的是使用from <algorithm>,例如std::fillstd::fill_n:

std::fill_n(players, MAX_PLAYERS, NULL);
Run Code Online (Sandbox Code Playgroud)