73.6 연습문제: 퀵 정렬 함수 사용하기
, 장 준모님이 작성int compare(const void* a, const void* b)
{
return strcmp(*(char*)a, *(char*)b);
}
const void 포인터로는 값을 비교할 수 없으므로 정렬할 배열의 자료형에 따라 const void 포인터를 변환한 뒤 역참조하여 값을 가져온다고 배웠는데
정답은 strcmp((char*)a, (char*)b)입니다
왜 역참조를 하지 않고 자료형만 바꿔주는지 이해가 안갑니다.
Re: 73.6 연습문제: 퀵 정렬 함수 사용하기
, 도장_ 관리자님이 작성UNIT 41.2의 설명을 보면 됩니다.
int strcmp(char const *_Str1, char const *_Str2);strcmp 함수는 값이 아니라 문자열이 저장된 포인터를 인수로 받습니다.
void*는 범용 포인터(general pointer)입니다.
const void* a에서 a는 범용 포인터이므로 연산을 할 수 없습니다.
(char*)a로 바꿔주면 pointer to const char가 되고, strcmp가 원하는 타입과 일치하게 됩니다.