typedef struct ListNode {
float coef; //계수
int expo; //지수
struct ListNode* link; //연결된 다음 노드를 가리켜야하니깐 구조체 ListNode와 같은 타입을 가리킬 수 있는 포인터 변수 link를 선언
};
typedef struct ListHead{
ListNode* head; //리스트의 첫번째 주소를 가지고있는 head를 선언
//head, coef, expo, link
};
요까진 어찌저찌 이해했는데
ListHead* createLinkedList(void) {
ListHead* L;
L = (ListHead *)malloc(sizeof(ListHead));
L->head = NULL;
return L;
}
요기서부터 뚝배기아픔 포인터 개념 넘나 어려운 것
ListHead* createLinkedList(void) { //ListHead형식에 createLinkedList에서 반환된 값(void)을 주소로 가짐?
ListHead* L; //L은 ListHead형식의 새로운 포인터 변수
L = (ListHead *)malloc(sizeof(ListHead)); //L에다가 ListHead의 크기만큼 메모리할당 (ListHead *)는 왜 붙음?
L->head = NULL; //L의 값에 head를 넣을껀데 head=NULL?
return L; //L값을 반환 즉 윗줄에 의해서 NULL값이 head에 들어감?
}
istHead* createLinkedList(void)요거에 대한 내 이해가 맞는지 설명좀 부탁드립니다 흑흑
7개의 댓글
무분별한 사용은 차단될 수 있습니다.
Tbps
Tbps
저기서 선언된 포인터 변수의 자료형은 ListHead* 형태인데 void형으로 메모리를 할당하면 호출할때 무슨 데이터를 찾는건지 컴퓨터는 알 수가 없음
그래서 같은 자료형 형태로 맞춰주기 위해서 ListHead* 로 강제 캐스팅 해주는거
Tbps
뚝배기사냥꾼
야광이
ListHead* L; //ListHead 형 포인터 변수 L 선언
L = (ListHead *)malloc(sizeof(ListHead)); //malloc으로 ListHead형 객체의 크기만큼 메로리 할당하고 malloc이 이제 메모리를 할당을하고 그 할당된메모리의 첫번째 주소값을 리턴해줘 근데 우리는 그메모리를 ListHead 객체로 다룰것이기때문에 ListHead*로 타입캐스팅을해줘 왜냐면 malloc하면 그냥 주소값리턴하는데 그원래 기본값이 (void*) 거등 근데 void*는 의미없잖아 크기가 얼마라는것도 모르고, 그래서 ListHead*로 타입캐스팅해줘서 이제 그 크기를 알수있는거지 ListHead 객체의 크기만큼이다 라는식으로
야광이
return L; //반환형식이 ListHead* 잖아 그러니 ListHead* 를 반환해줘야되겠지? 이미 L이라는 변수에는 malloc으로 할당된 메모리의 첫번쨰 주소값이 들어있어 *L 이라고하면 L의 값의 할당된메모리첫번쨰주소값이있으니 그주소값의 메모리 번지를 찾아가서 크기가 얼마큼이냐 sizeof(ListHead) 만큼의 크기만큼을 접근할수있는거야.
}
뚝배기사냥꾼