해결된 질문
작성
·
100
0
강사님 안녕하십니까. 양질의 수업을 제공해주셔서 잘 듣고 있습니다.
다름아니고 질문이 있어서 여쭙고자 게시글 남깁니다.
다름아니고 RangeSearch002 프로젝트 중 singlelist.c 파일의 SearchByAgeRange 함수에서 아래와 같은 코드에서 이해가 되지 않는 점이 있습니다.
"""
void** pNodePtrList = malloc(sizeof(void*) * cnt);
"""
본 질문의 목적은 아래와 같습니다.
ㅇ malloc을 할 때 왜 따로 타입캐스팅을 하지 않았는가?
검색해서 찾아봤을 때 malloc은 타입캐스팅을 해도 되고 안 해도 되지만 제가 한다면 (void *)malloc 으로 썼을 거 같으며, 디버깅했을 때 결과도 동일한 결과물을 제공하는 것으로 확인했습니다.
혹시 잘못된 점이 있으면 따끔한 지적 부탁드리겠습니다.
감사합니다. 좋은하루 되십시오.
답변 1
0
C언어는 void* 형식에 대해 굳이 타입 캐스팅을 하지 않아도 무방합니다. 그리고 반환 형식은 void* 입니다. 그러므로 굳이 (void*)malloc() 같은 코드는 필요하지 않겠습니다. 오히려 지금 상황에서 굳이 캐스팅을 하자면 (void**)로 캐스트 하는 것이 맞겠습니다.
그런데 그 보다 더 중요한 것은 pNodePtrList가 USERDATA*에 대한 포인터가 아니라 void**로 선언했는가 입니다. 결과만 말씀드리면 이는 추상자료형을 적용하기 위한 포석이기 때문입니다. 참고하시기 바랍니다. 😄