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

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

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

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

演员总是安全的,只要指针有效,解除引用是安全的。 你使用void **的唯一情况是当你计划取消引用它以获得void *

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

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

你不应该使用void**