将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**
为什么要在此处丢弃类型信息?它在那里有一个很好的理由。