代码之家  ›  专栏  ›  技术社区  ›  HighPredator

使用size_t进行void指针模拟

  •  1
  • HighPredator  · 技术社区  · 9 年前
    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 回复  |  直到 9 年前
        1
  •  3
  •   AProgrammer    9 年前

    对于 数据 指针,从指针到整数类型返回到 起初的 指针类型定义得很好,只要整数类型足够宽,可以保持指针而不会丢失。

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

    uintptr_t intptr_t 是定义为足够宽以保持指针而不丢失的整数类型。

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