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

use*_*521 2 c pointers casting

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

char **cpp;
// ... allocation and what not 
void *vp = (void *)cpp;
// ...
cpp = (char **)vp;
Run Code Online (Sandbox Code Playgroud)

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

Thi*_*ter 6

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

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