将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**
。