将指向枚举的指针传递给指向 int 的输出参数

Cho*_*ett 4 c enums casting

我有类似于以下的代码:

void generateInt(int *result)
{
  /* chosen by fair dice roll*/
  *result = 1;
}

typedef enum colour
{
  RED,
  GREEN,
  BLUE
} COLOUR;

int main(int, char**)
{
  COLOUR col, col2;
  int i;

  generateInt(&i);
  col = (COLOUR)i;

  generateInt((int*)(&col2));

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在第二次调用 之后generateInt,是否保证col和col2都等于GREEN?我知道第一个版本设置col是合法的,但我不知道它是否定义了如果将指向枚举的指针转换为指向整数的指针,然后通过指针进行分配会发生什么。

Ker*_* SB 5

那当然不行。您没有理由相信枚举的基础类型是int,因此转换指针可能非常不合适。

为什么不直接改变功能呢?

void generateInt(COLOUR * c)
{
    *c = GREEN;
}
Run Code Online (Sandbox Code Playgroud)