c언어 링크드리스트 넘모어려워요

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개의 댓글

2018.04.17
단순하게 링크드 리스크를 표현하는 사각형 하나를 만든다고 생각하면된다.
0
2018.04.17
malloc에 ListHead*가 붙는 이유는 malloc의 함수 반환데이터가 void 형태라서 그런거다

저기서 선언된 포인터 변수의 자료형은 ListHead* 형태인데 void형으로 메모리를 할당하면 호출할때 무슨 데이터를 찾는건지 컴퓨터는 알 수가 없음

그래서 같은 자료형 형태로 맞춰주기 위해서 ListHead* 로 강제 캐스팅 해주는거
0
2018.04.17
NULL을 넣는 이유는 head의 초기값을 NULL로 해야 해당 링크드 리스트의 데이터가 아얘 없는건지 하나라고 있는건지 구분할 수 있으니까임
0
2018.04.17
@Tbps
일단 설명 감사합니다 천천히 이해해보겠음 !
0
2018.04.26
ListHead* createLinkedList(void) { //ListHead라는 객체를 생성할것인데 파라미터는 필요없어서 void라고 씀. 파라미터가 없을때 void안써도 되는걸로암.잘은모르겟어 존나의미없는거임 void라는게.공허하다 머이딴의미?
ListHead* L; //ListHead 형 포인터 변수 L 선언
L = (ListHead *)malloc(sizeof(ListHead)); //malloc으로 ListHead형 객체의 크기만큼 메로리 할당하고 malloc이 이제 메모리를 할당을하고 그 할당된메모리의 첫번째 주소값을 리턴해줘 근데 우리는 그메모리를 ListHead 객체로 다룰것이기때문에 ListHead*로 타입캐스팅을해줘 왜냐면 malloc하면 그냥 주소값리턴하는데 그원래 기본값이 (void*) 거등 근데 void*는 의미없잖아 크기가 얼마라는것도 모르고, 그래서 ListHead*로 타입캐스팅해줘서 이제 그 크기를 알수있는거지 ListHead 객체의 크기만큼이다 라는식으로
0
2018.04.26
L->head = NULL; //L->head 의 자료형을 확인해봐 ListHead형이아니지? ListNode형이잖아 값이 없잖아. ListHead객체와 ListNode객체를 각각따로 봐야되. ListHead는 ListNode를 가지는거지 그 시발점이라고생각하믄되. 여기서 왜 head라고 변수명이되있냐면 head라는뜻이 그 연결된 사슬들의 맨처음 시작점이라고 생각하면되, ListHead 객체는 즉 ListNode를 변수로가지는 객체라고 생각하면되고 이제 ListNode들이 서로서로 연결되서 꼬리에꼬리를물고 이어지는 식이라고새각하면되
return L; //반환형식이 ListHead* 잖아 그러니 ListHead* 를 반환해줘야되겠지? 이미 L이라는 변수에는 malloc으로 할당된 메모리의 첫번쨰 주소값이 들어있어 *L 이라고하면 L의 값의 할당된메모리첫번쨰주소값이있으니 그주소값의 메모리 번지를 찾아가서 크기가 얼마큼이냐 sizeof(ListHead) 만큼의 크기만큼을 접근할수있는거야.
}
0
2018.04.26
@야광이
ㅋㅋㄳㄳ이젠다앎
0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180421 [컴퓨터] 모니터 HDR 이거 켜는게 좋음? 4 야스그랜드마스터 0 32 분 전 36
180420 [모바일] 애플워치 질문! 1 파세르 0 42 분 전 30
180419 [잡담] 회사 회의용으로 google meet 쓰는 분 있음? 2 갤럭시울리 0 1 시간 전 54
180418 [잡담] 지금 HDD 특가 뜬곳 있나? 5 내일까지 0 3 시간 전 143
180417 [컴퓨터] 라데온으로 헬다2 돌리시는분 14 에더리 0 4 시간 전 112
180416 [컴퓨터] 모니터 한대 더 사려는데 오버려나? 4 or5469 0 4 시간 전 99
180415 [컴퓨터] PC 유튜브 쇼츠 좋아요 버튼 안 눌러지는 문제 3 프로숨쉼이 0 5 시간 전 67
180414 [컴퓨터] 요즘도 수냉쿨러 DIY로 하면 ㅈ됨? 16 개밥뺏어먹기대회일등 0 6 시간 전 165
180413 [컴퓨터] CPU 쿨러에서 갑자기 덜덜덜 하고 소음이 존나 크게 나는데 8 로스앤젤리스요정 1 8 시간 전 117
180412 [잡담] 이어폰 추천좀 1 dlatnaks 0 9 시간 전 85
180411 [잡담] 쿨엔 사이트 망해버렸나보다 14 익명36 0 9 시간 전 339
180410 [잡담] obs 사용시 gtx 시리즈랑 rx 시리즈랑 성능 차이 있음?? 21 해물잠봉 0 16 시간 전 185
180409 [컴퓨터] 컴퓨터 첫 on 흙수저 0 17 시간 전 121
180408 [컴퓨터] 이거 나사 드라이버 뭐 사용해야 되나요 4 흙수저 0 18 시간 전 125
180407 [프로그래밍] 반응형 웹페이지가 내가상상한거랑 좀 다르네 3 평택국 0 18 시간 전 273
180406 [컴퓨터] 윈도우 11 정품 구매해버렸다 5 69746974 1 18 시간 전 271
180405 [컴퓨터] 가난뱅이 컴퓨터 자랑 7 69746974 2 20 시간 전 366
180404 [컴퓨터] 고사양 게임 돌리면 컴퓨터가 멈춥니다 ㅠㅠ 21 탱이탱이뭉탱이 1 21 시간 전 195
180403 [컴퓨터] 5600x >5700x3d 하려는데 체크 좀 2 오뜨 0 22 시간 전 181
180402 [잡담] 윈도우 클린설치하다가 메인보드 뻑가나..? 6 꺄꺄룽 0 22 시간 전 137