只是想知道这样投射是否安全:
char **cpp;
// ... allocation and what not
void *vp = (void *)cpp;
// ...
cpp = (char **)vp;
应该使用 void ** 还是 void * 可以?这适用于我的几个盒子没有问题,但想知道它是否会导致某些系统出现问题。
强制转换总是安全的,只要指针有效,取消引用它就是安全的。您使用 a 的唯一情况void **
是您计划取消引用它以获取void *
.
但是,除非您进行指针算术运算,否则它并不重要。正如您在http://codepad.org/UcZUA0UL上看到的,无论您使用void*
或void **
. 在您实际使用指针之前,您无论如何都要将其转换回char **
- 所以它在void
-ish 时永远不会被取消引用。
void*
如果原始指针是 ,则来自 的强制转换(以及之后的用法)char **
。
你不应该使用void**
.