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

时间:2012-11-29 15:51:23

标签: c casting enums

我的代码类似于以下内容:

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;
}

第二次致电generateInt后,colcol2是否保证等于GREEN?我知道第一个版本设置col是合法的,但是我不知道它是否定义了如果将指向枚举转换为指向int的指针,然后通过指针赋值,会发​​生什么。

2 个答案:

答案 0 :(得分:4)

肯定好。你没有理由相信枚举的基础类型是int,因此投射指针可能非常不合适。

为什么不改变功能?

void generateInt(COLOUR * c)
{
    *c = GREEN;
}

答案 1 :(得分:1)

这应该是一个正确的方法:

void generateInt(COLOUR * c)
{
    //Roll number given here
    switch(roll_result)
    {
      case 0 :
        *c = RED;
      break;
      case 1 :
         *c = GREEN;
      break;          
      case 2 :
         *c = BLUE;
      break;
      //...
      default :
      break;
   }
}