我與這個龐大的開源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