C中的指针和枚举
Pointers and enum in C
我正试图将我的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;
[....]
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- C++ 指向枚举数组的指针
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 为什么允许将整型、枚举和指向成员的指针类型reinterpret_cast到自身?
- 将指向类型化/大小的枚举的指针转换为指向基础类型的指针是否安全?
- 扩展 std::to_string 以支持枚举和指针
- 定义基于模板的映射指针,以便在验证范围时将 int 解析为枚举
- 如何将指针值强制转换为枚举
- 使用C++中的函数指针映射枚举键和值
- 如何将 size_t 类型的指针转换为枚举指针
- 枚举指针的值丢失
- C++中的枚举指针
- 枚举指针是否可以指向常数值
- 我的类包含 1 个枚举、2 个 int 和一个指针。它没有虚函数,但测量 20 字节。为什么?
- 为什么不能通过指针将 C++11 强类型枚举强制转换为基础类型?
- 表达式在指针上必须具有整型或非整型枚举类型
- C中的指针和枚举
- 这个 C++ [out] 参数是指向枚举的指针,还是只是一个值
- 是否可以将指向类的指针用作枚举常量?