【问题标题】:Using size_t for void pointer emulation使用 size_t 进行 void 指针模拟
【发布时间】:2015-04-25 17:57:12
【问题描述】:
int bar(const size_t value) {
  char *d = (char*) value; 
  *d = 'B';
}

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

  2. 它有什么优点/缺点?

【问题讨论】:

  • 合法是什么意思?
  • @reader size_t 被解释为data*,不是吗?该函数按值接受参数。
  • @gio:您链接了 this 问题。

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


【解决方案1】:

对于 data 指针,只要整数类型足够宽以容纳指针没有丢失。

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

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

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

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 2016-01-08
    • 2014-05-30
    • 2018-03-03
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2021-09-02
    相关资源
    最近更新 更多