我正在尝试将我的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)
我的错是什么?感谢你的时间提前.
您需要取消引用指针(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)
除了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)