在C

时间:2018-09-25 07:09:14

标签: c struct

您好,我正在用c构建一个简单的游戏(这是该语言的新功能)。我使用以下结构:

typedef struct
{
    int adjacent_mines;
    bool revealed;
    bool is_mine;
} Tile;

struct GameState
{
    Tile tiles[NUM_TILES_X][NUM_TILES_Y];
};
typedef struct GameState GameState;

我想知道如何正确调用和设置结构吗?我有以下代码,我想在其中设置每个图块的状态。

void intialize_mines(){
    for (int i =0; i < NUM_TILES_X; i++){
        for (int j =0; j < NUM_TILES_Y; j++){
            tiles[i,j].revealed = false;
        }
    }
}

但是根据我的控制台输出,我做错了。我将如何正确设置此设置?

3 个答案:

答案 0 :(得分:3)

struct GameState只声明一个类型(就像int只是一个类型一样)。您必须使用类似于普通变量(GameState foo;)的int foo;在内存中创建真实的结构。而且,如果不引用foo.tiles之类的结构,就无法访​​问结构的内容。在此范围内,tiles本身是未知的。

之后,您可以使用foo.tiles[i][j].revealed访问该结构。

但是要在您的函数中访问此结构,您必须将其作为指针传递给函数,或者在文件范围(也称为全局)中声明该结构。我希望第一个版本的功能更清晰。

您的函数将如下所示:

void intialize_mines( GameState *foo){
    for (int i =0; i < NUM_TILES_X; i++){
        for (int j =0; j < NUM_TILES_Y; j++){
            foo->tiles[i][j].revealed = false; // -> is a special operator for pointers to structs. It's the same as (*foo).
        }
    }
}

相应的函数调用为:

GameSate bar;
intialize_mines( GameState &bar);

您还应该检查如何使用多维数组。您使用两个单独的[]正确地声明了它,但是在函数中使用了[x,y],这在C语言中是不正确的。它与声明tiles[i][j]

中的相同

答案 1 :(得分:1)

对于像tiles这样的多维数组,您必须像这样在[]中指定每个维度的数组下标:

tiles[i][j].revealed = false;

这意味着将属于revealedj行第i行第tiles的{​​{1}}设置为false

在执行任何操作之前,您必须定义类型GameState的结构变量。

GameState initGS;

void intialize_mines(){
    for (int i =0; i < NUM_TILES_X; i++){
        for (int j =0; j < NUM_TILES_Y; j++){
            initGS.tiles[i][j].revealed = false;
        }
    }
}

答案 2 :(得分:0)

您只是想实例化GameState结构。

COALESCE(b.ContactId,a.ContactId)  AS ContactId,
   COALESCE(b.LastActivityDate,a.LastActivityDate)  AS LastActivityDate,
   COALESCE(b.ActivityType,a.ActivityType,)  AS ActivityType,
    COALESCE(b.ActionPersonName,a.ActionPersonName)  AS ActionPersonName
相关问题