【问题标题】:Is it safe to cast void pointer to char pointer pointer将void指针转换为char指针指针是否安全
【发布时间】:2012-05-11 16:36:42
【问题描述】:

只是想知道这样投射是否安全:

char **cpp;
// ... allocation and what not 
void *vp = (void *)cpp;
// ...
cpp = (char **)vp;

应该使用 void ** 还是 void * 可以?这适用于我的几个盒子没有问题,但想知道它是否会导致某些系统出现问题。

【问题讨论】:

  • 为什么要在这里丢弃类型信息?它的存在是有充分理由的。

标签: c pointers casting


【解决方案1】:

强制转换总是安全的,只要指针有效,解引用它就是安全的。 您使用void ** 的唯一情况是您计划取消引用它以获得void *

但是,除非您进行指针算术运算,否则这并不重要。正如您在http://codepad.org/UcZUA0UL 上看到的那样,无论您使用void* 还是void **,它都可以正常工作。在你实际使用指针之前,无论如何你都要将它转换回char ** - 所以它在void-ish 时永远不会被取消引用。

【讨论】:

    【解决方案2】:

    如果原始指针是char **,则来自void* 的转换(以及之后的用法)。

    你不应该使用void**

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-10
      • 2021-07-22
      • 2017-02-12
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      相关资源
      最近更新 更多