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

将void指针强制转换为char指针安全吗,c,pointers,casting,C,Pointers,Casting,只是想知道这样投是否安全: char **cpp; // ... allocation and what not void *vp = (void *)cpp; // ... cpp = (char **)vp; 应该使用void**还是void*可以?这可以在我的几个盒子上正常工作,但我想知道它是否会在某些系统上引起问题。强制转换总是安全的,只要指针有效,取消引用它就是安全的。 使用void**的唯一情况是,您计划取消对它的引用以获得void* 然而,除非你使用指针算术,否则这并不重要。正

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

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

应该使用void**还是void*可以?这可以在我的几个盒子上正常工作,但我想知道它是否会在某些系统上引起问题。

强制转换总是安全的,只要指针有效,取消引用它就是安全的。 使用
void**
的唯一情况是,您计划取消对它的引用以获得
void*

然而,除非你使用指针算术,否则这并不重要。正如您在上面看到的,无论您使用
void*
还是
void**
,它都可以正常工作。在您实际使用指针之前,您无论如何都要将其强制转换回
char**
,这样它在
void
-ish时就不会被取消引用。

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


您不应该使用
void**

为什么要在此处丢弃类型信息?它在那里有一个很好的理由。