C中的指针和枚举

Pointers and enum in C

本文关键字:枚举 指针      更新时间:2023-10-16

我正试图将我的c++代码重写为C,并通过指针比较enum遇到了问题。请看一看。

Enum:

enum state{TITLE,PLAY,LOST}

函数是这样的:

void ChangeState(int *state, int NewState)
{
state = NewState;
if (state == TITLE)
{
/* something */
}
else if (state == PLAY)
{
/* something2 */
}
else if (state == LOST)
{
/* something3 */
}
}

当我尝试调用这个函数时:

ChangeState(&state, TITLE)

等。它不能正常工作。当我输入代码时:

if (state == TITLE)
{
/* instructions */ 
}

我错在哪里?提前感谢您的宝贵时间。

你需要解引用指针(使用*state)来读取它指向的值

这意味着你的代码应该改为
void ChangeState(int *state, int NewState)
{
    *state = NewState;
    if (*state == TITLE)
    {
        /* something */
    }
    else if (*state == PLAY)
    {
        /* something2 */
    }
    else if (*state == LOST)
    {
        /* something3 */
    }
}

除了simmonc答案之外,还可以通过switch来更改if语句。在这种情况下(使用枚举)更合适。

void ChangeState(int *state, int NewState)
{
    *state = NewState;
    switch (*state)
    {
        case TITLE: 
            // ...
            break;
        case PLAY:
            // ...  
            break;
        case LOST:
            // ...  
            break;
        default: break;
    }
}

你所做的,它改变了指针的地址。您要做的是更改存储在该地址(指针所指向的位置)中的int的值。因此,要纠正这个错误,你需要在指针名称前加一个*。

许多程序员使用前缀来跟踪间接级别。

如果你有一个指向状态的指针,它应该被命名为pState:

void ChangeState(int *pState, int NewState)
{
    *pState = NewState;
    // Error:  This changed the POINTER, not the value referenced by the pointer.
    // state = newState; 
    [....]