나는이 큰 오픈 소스 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]);
: 발견 draw-paint.c (라인 332)
return cbz_strnatcmp(*(const char **)a, *(const char **)b);
//both parameters are expected to be const char*
: memento.c (라인 1122)
unsigned int rgba = *((unsigned int *)color);
에서 확인할 에서 : mucbz.c (라인 73)
라이브러리 이름을 지정할 수 있습니까? – 2501
@ 2501 [mupdf] (http://mupdf.com/) – Cody
실제 소스 코드에 그러한 예제에 대한 링크를 게시 할 수 있습니까? – 2501