다음 코드 스 니펫은 K &에서 가져온 것입니다. 5-11 장 : 포인터 함수 :포인터 배열 (예 : * array [])을 캐스팅하는 경우 (void *) 대신에 (void *)를 사용하십시오.
qsort((void**) lineptr, 0, nlines-1,
(int (*)(void *, void *)(numeric ? numcmp : strcmp));
코드를 (void*)
으로 컴파일/실행 할 수 있습니까? 그렇다면 (void **)
으로 줄을 바꾸는 이유는 무엇입니까? 두 캐스트 사이에 내부적 인 차이점이 있습니까? 은 배열을 캐스팅하는 반면 (void **)
은 배열과 저장된 포인터를 모두 캐스팅하고 있습니까?
나는 **lineptr
이 *lineptr[]
과 같음을 알고 있으며, void cast는 컴파일러를 행복하게 만드는 이유입니다.
여기서 정렬은 배열에 저장된 포인터가 가리키는 데이터에 대해 수행됩니다. – haccks
네, 캐스트가'(void **)'를 사용하여 포인터에 적용되는 것이지만'(void *)'캐스트는 배열에만 수행됩니까? – Kevin
이 경우 캐스팅은'void **'로 수행됩니다. – haccks