从void *转换为int

时间:2017-11-03 18:35:27

标签: c

我正在从事一个学校项目,而且我无法转换为' void *' to' int'。我怎么能这样做?

示例:

void *search(void *id) {
   int i;
}

如何在i中存储id的整数?

2 个答案:

答案 0 :(得分:2)

您需要将指针强制转换为int *,然后取消引用指针。

int i = *(int *)id;

答案 1 :(得分:2)

  

从void *转换为int

轻松,使用(int)投射。 void*始终可以转换为int。然而,这可能会失去信息,可能不是OP的真正目标。如果目标是将void*指针真正转换为某个整数而不丢失信息,请考虑可选的整数类型(u)intptr_t

void *search1(void *id) {
  int i = (int) id;
  ...
}
  

如何在i中存储id的整数?

如果int位于id指向的内存中,则转换为int*并取消引用。

void *search2(void *id) {
  int *ip = (int *) id;
  int i = *ip;   // or in one step *((int *) id)
  ...
}

如果指针id不是来自有效的int*,那么结果就是未定义的行为(UB)。