강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của scryid8884
scryid8884

câu hỏi đã được viết

C ngôn ngữ cho những người học nghiêm túc về cấu trúc dữ liệu tuyến tính

Tách rời dữ liệu chính và index đã sắp xếp (sắp xếp index)

인덱스정렬 강의, 04_ListAndIndex질문드립니다.

Đã giải quyết

Viết

·

184

·

Đã chỉnh sửa

0

안녕하세요 강사님

04_ListAndIndex의 원본 코드의 signleList.c파일의

SearchByIndexAgeRange함수의 354번째 줄 라인에서

int length = idxMax - idxMin + 1;
USERDATA** aSelected = malloc(sizeof(void*) * length);
memcpy(aSelected, aList + idxMin, sizeof(void*) * length);

와 같이 aSelected의 리턴 타입이 USERDATA** 인데

왜 malloc으로 생성할때, "malloc(sizeof(void*) * length);"로

왜 void*의 size만큼 생성해주는지 잘 모르겠습니다.

USERDATA** aSelected = malloc(sizeof(USERDATA*) * length);

다음 위의 코드처럼 "malloc(sizeof(USERDATA*) length);"즉, USERDATA*의 size가되어야 알맞지 않나요??

아니면 USERDATA* void* 모두 크기가 8byte라서 메모리가 할당되는 크기가 같은건가요?? 제가 알고 있는 개념이 맞는걸까요??

강의 잘 듣고있습니다 감사합니다.

c코딩-테스트알고리즘vc++

Câu trả lời 1

1

nullnull8537님의 프로필 이미지
nullnull8537
Người chia sẻ kiến thức

포인터가 가리키는 대상 자료형이 무엇이건 포인터 변수의 크기는 같습니다. 32비트 시스템이면 32비트, 64비트 시스템이면 64비트 크기를 갖습니다. 그러므로 USERDATA*나 void*의 크기는 같습니다. 따라서 malloc() 함수로 할당받는 메모리의 크기는 동일합니다.

그런데 제가 굳이 void*를 사용한 이유는 데이터 추상화를 적용하려는 의도 때문입니다. 이에 대해서는 ADT에 대한 설명에서 이어집니다. 참고하시기 바랍니다. 😄

scryid님의 프로필 이미지
scryid
Người đặt câu hỏi

감사합니다

Hình ảnh hồ sơ của scryid8884
scryid8884

câu hỏi đã được viết

Đặt câu hỏi