使用size_t进行void指针仿真

时间:2015-02-24 07:26:17

标签: c callback type-conversion void-pointers size-t

int bar(const size_t value) {
  char *d = (char*) value; 
  *d = 'B';
}

int main() {
    char bar = 'A';
    bar((size_t)&d);
}
  1. 使用size_t模拟void指针类型合法吗?为什么呢?

  2. 它有什么好处/缺点?

1 个答案:

答案 0 :(得分:3)

对于 data 指针,只要整数类型足够宽,就可以很好地定义从指向整数类型的指针到原始指针类型的往返行程指针没有丢失。

size_t已定义为保持对象大小。它们通常足够大以容纳指针表示,但这并不能保证,它们是假设不成立的实现。

uintptr_tintptr_t是定义为足以容纳指针而不会丢失的整数类型。

对于 function 指针,我知道没有这样的保证。