只是想知道这样投射是否安全:
char **cpp;
// ... allocation and what not
void *vp = (void *)cpp;
// ...
cpp = (char **)vp;
如果使用无效**或无效*罚款?这对我的几个盒子没有问题,但是想知道它是否会在某些系统上引起问题。
答案 0 :(得分:6)
强制转换始终是安全的,只要指针有效,解除引用就是安全的。
您使用void **
的唯一情况是您计划取消引用它以获得void *
。
然而,除非你做指针算术,否则它并不重要。正如您在http://codepad.org/UcZUA0UL上看到的那样,无论您使用void*
还是void **
,它都能正常运行。在您实际使用指针之前,无论如何都要将其强制转换回char **
- 所以它永远不会被解除引用void
- ish。
答案 1 :(得分:3)
如果原始指针为void*
,则从char **
投射(以及之后的用法)。
您不应该使用void**
。