2

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

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

应该使用 void ** 还是 void * 可以?这适用于我的几个盒子没有问题,但想知道它是否会导致某些系统出现问题。

4

2 回答 2

6

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

但是,除非您进行指针算术运算,否则它并不重要。正如您在http://codepad.org/UcZUA0UL上看到的,无论您使用void*void **. 在您实际使用指针之前,您无论如何都要将其转换回char **- 所以它在void-ish 时永远不会被取消引用。

于 2012-05-11T16:39:24.777 回答
3

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

你不应该使用void**.

于 2012-05-11T16:39:50.327 回答