C中的指针和枚举

nik*_*amn 2 c c++ enums

我正在尝试将我的C++代码重写为C,并且遇到了通过指针比较枚举的问题.请看一下.

枚举:

enum state{TITLE,PLAY,LOST}
Run Code Online (Sandbox Code Playgroud)

我的功能看起来像这样:

void ChangeState(int *state, int NewState)
{
state = NewState;

if (state == TITLE)
{
/* something */
}
else if (state == PLAY)
{
/* something2 */
}
else if (state == LOST)
{
/* something3 */
}

}
Run Code Online (Sandbox Code Playgroud)

当我尝试通过以下方式调用此函数时:

ChangeState(&state, TITLE)
Run Code Online (Sandbox Code Playgroud)

等它无法正常工作.当我输入我的代码时:

if (state == TITLE)
{
/* instructions */ 
}
Run Code Online (Sandbox Code Playgroud)

我的错是什么?感谢你的时间提前.

sim*_*onc 6

您需要取消引用指针(use *state)以读取它指向的值

这意味着您的代码应该更改为

void ChangeState(int *state, int NewState)
{
    *state = NewState;

    if (*state == TITLE)
    {
        /* something */
    }
    else if (*state == PLAY)
    {
        /* something2 */
    }
    else if (*state == LOST)
    {
        /* something3 */
    }

}
Run Code Online (Sandbox Code Playgroud)


Ray*_*nda 6

除了simonc答案,您还可以if通过a 更改语句switch.鉴于案例(使用枚举)更合适.

void ChangeState(int *state, int NewState)
{
    *state = NewState;

    switch (*state)
    {
        case TITLE: 
            // ...
            break;
        case PLAY:
            // ...  
            break;
        case LOST:
            // ...  
            break;
        default: break;
    }
}
Run Code Online (Sandbox Code Playgroud)