假设我具有此结构
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,我不能使用全局变量
您需要为结构堆栈变量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。希望这会对您有所帮助。
将指向状态的指针传递给您的函数:
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);
}