我与这个庞大的开源C库的工作,我经常发现类型之间的强制类型转换看起来像这样:是否有理由这样做演员?
char *str;
//some code
unsigned char *str2 = *(unsigned char **) &str;
我与它发挥各地,当我改变它看起来像
unsigned char *str2 = (unsigned char *) str;
它似乎没有问题的工作。请注意,这些强制转换在整个代码中很常见,在除unsigned char之外的其他类型中使用。
是否有理由通过引用和解引用来像这样进行投射?
编辑:我不知道它是否相关,但此代码应该是C89兼容。
编辑2:在发现一些具体实例
void *q = *(void **)(&p[i]);
:memento.c(线1122)
unsigned int rgba = *((unsigned int *)color);
发现于:发现draw-paint.c(线332)
return cbz_strnatcmp(*(const char **)a, *(const char **)b);
//both parameters are expected to be const char*
在:mucbz.c(线73)
你可以命名图书馆吗? – 2501
@ 2501它是[mupdf](http://mupdf.com/) – Cody
你可以在实际的源代码中发布任何链接到这样的例子吗? – 2501