动态结构初始化和计数器实现

问题描述 投票:0回答:2

假设我具有此结构

typedef struct Stack
    {
        int firstPlayerScore;
        int secondPlayerScore;
        int gamesCount;

    }Stack;

和此函数来初始化值:

void initStack(Stack *g)
{
    g->firstPlayerScore = 0;
    g->secondPlayerScore = 0;
    g->gamesCount = 0;

}

问题出在这里,我需要能够重置其他值,但是每次运行gameStart函数时都要保留g.gamescount并添加+1。它可能是一个简单的解决方案,但我开始失去理智,谢谢。

void gameStart(int choice) {

    Stack g;
    initStack(&g);

    ++g.gamesCount; // this works only once, then is reset again to 0. 
     {
       // do stuff
     }
}

不能采取不同的做法,因为我认为需要对结构进行初始化。也许以某种方式只能初始化一次?

P.S,我不能使用全局变量

c data-structures dynamic-memory-allocation
2个回答
0
投票

您需要为结构堆栈变量g分配内存。您不需要全局变量,只需要在声明g的同时就需要调用malloc函数来分配结构类型大小的内存。看起来像这样:

void gameStart(int choice) {

    Stack *g = (Stack *) malloc(sizeof(Stack));
    initStack(g);

    ++g->gamesCount; // this works only once, then is reset again to 0. 
    {
        // do stuff
    }
}

Malloc返回void *,所以最好将其转换为Stack *。另外,您需要创建Stack *,因为它是一种结构类型,并且需要使用指针tpye。希望这会对您有所帮助。


0
投票

将指向状态的指针传递给您的函数:

void gameStart(Stack *g, int choice) {
    ++g.gamesCount; // this works only once, then is reset again to 0. 
     {
       // do stuff
     }
}

然后在main()内:

int main() {
    Stack g;
    initStack(&g);
    gameStart(&g, 49);
}
© www.soinside.com 2019 - 2024. All rights reserved.