将void指针强制转换为char指针指针是否安全

时间:2012-05-11 16:36:42

标签: c pointers casting

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

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

如果使用无效**或无效*罚款?这对我的几个盒子没有问题,但是想知道它是否会在某些系统上引起问题。

2 个答案:

答案 0 :(得分:6)

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

然而,除非你做指针算术,否则它并不重要。正如您在http://codepad.org/UcZUA0UL上看到的那样,无论您使用void*还是void **,它都能正常运行。在您实际使用指针之前,无论如何都要将其强制转换回char ** - 所以它永远不会被解除引用void - ish。

答案 1 :(得分:3)

如果原始指针为void*,则从char **投射(以及之后的用法)。

您不应该使用void**