c언어 연결리스트인데
head노드를 매개변수로 받아들여서 이거를 시작점으로 하는건 ok거든?
근데 curr같은 순회용으로 쓸 임시변수는 솔직히 있던가 없던가 차이 없는거 같은데
가장 이해 안되는게 curr이라는 포인터변수를 head노드로 얕은복사시켜서 연결시켜놨는데(cur=head)
예를들어 curr = curr->next같이 주소값을 증가 시켜서 3번째 위치에 위치시켰다고 치면
어떻게 순회용 함수나 다른 함수에서 다시 head를 매개변수로 호출했을때
3번째 위치부터 시작하는게 아니라 0번째(head)부터 시작하는거임?
책봐도 안나와 있고 그냥 0번째(head)부터 시작함 이딴 소리만함
생성함수나 다른함수 에서 주소값 증가시키고 끝나도
heap영역에 새로운 노드 생성했던거나 증가시킨 주소값이 함수 끝나도 살아 있으니까 free로 개박살을 내지 않는이상 분명히 있는데
3번째부터 시작해야 될꺼 같은데 도대체 뭐냐
거기 프라이벳으로 head포인터 있지 않음? 구현을 어떻게 해놨는지 모르니까 모르겠지만 충분히 가능한데
단순 연결리스트고 head노드 하나를 메인함수에 하나 생성하고 생성, 순회, 삭제, 이런 함수에 헤드노드만 매개변수로 전달해서 하는 식임 그리고 각 함수에서 구조체에 할당된 next라는 다음 함수로 이동하는 구조체 변수가지고 주소값 증가하는 식이고
프라이벳으로 head포인터는 무슨소리인지 모르겠음 어떻게 가능한지 설명좀
void allprintln(node* target) { node* cur = target; while (cur->next != NULL) { cur = cur->next; printf("%d ", cur->data); } } 다른 사람 코드 예시긴한데 target이 메인함수에 있는 head를 매개변수로 받는거임 이거를 얕은복사로 연결시키면 주소값 3만큼 증가되도 메인으로 돌아와도 head노드는 3부터 시작해야 하는거 아님? 책봐도 설명이 없음
기존노드는 그대로 살아 있지만 0, 1, 2 이후 노드인 3부터 시작안하고 0(head)부터 시작하는 원리를 모르겠음 이거만 알면 되는데
ㄴ head->target->cur 순으로 얕은 복사되는데 당연히 변경되는거 아니냐? 포인터로 연결하는건데 cur바꾸면 target, head 다바뀔텐데
어? 뭔말이지. head에 직접 값을 변경 하는거 아니면 head는 항상 head고 head->next로 가는건 참조하는 사람이 가는거지 head가 이동하는게 아님.
ㄴ head = head->next 이렇게 하면 head가 다음 노드 값으로 넘어가자너 다른 함수에서 이런 행위를 2번 반복했을때 0, 1 거르고 2번부터 시작하는 원리가 잘 이해 안감 당연히 head메모리 자기 고유 주소는 변화 없겠지만 참조하는 주소는 변화가 있을텐데 이 참조하는 주소가 증가가 됬음에도 0부터 시작하는게 잘 모르겠음
head = head->next; head = head->next 이렇게 하면 2번노드를 가리키고 끝낼텐데 메인함수로 돌아와서 출력하면 head(0번노드)를 가리키고 있음
내가 가장 이해 안되는게 연결리스트는 포인터로하는 얕은복사니까 결국 원본에 영향을 준다는 점임, 깊은복사로 하는거 였음 각자 따로따로니까 오케이노~!하면서 넘어갔을텐데
어? 그럼 문제가 있는데? 매개 변수로 넘기는 노드가 구조체 임? 그게 아니면 문제가 있는거다.
얕은 복사 그 ㅈㄹ이면 2번째 노드가 맞긴 하지.
안되겠다 산속에서 빤스만 입고 다니는 고인물 형 불러야 겠다.
즉, 노드 만들거 다 만들면 현재위치는 최소 0번노드 보다 뒤인데, 순회함수 같은거 호출할때 마다 0번노드(head)부터 시작하는 원리가 이해가 안감
매개변수로 넘기는 head가 구조체 변수라 data랑 다음 링크값을 담고있는 구조체변수임
그냥 무지성으로 만들라고 하면 만드는데, 현재 참조하는 주소값에 대한 이해가 잘 안됨 분명 생성이나 순회때 마지막 노드까지 달렸으면 다른 함수 끝나고 메인함수에 있는 head(구조체 변수)가 현재 참조하는 번지수의 주소값 내놔라고 요청하면 헤드노드가 아닌 마지막까지 달렸던 노드의 데이터값을 줘야한다고 내 논리상으로는 그런데
애잉 그러면 얕은 복사가 아니지.
매개 변수로 전달 될 때 깊은 복사가 일어남. 끗.
swap(int *a, *b) 이딴 함수처럼 포인터써서 교환하는 함수 짜면 얕은복사 일어나서 바꾸고자하는 값들 값 교차되자너 그러면 이것과 비슷하게 현재 참조하는 주소도 다른함수에서 호출해서 증가를 시켰으면 바뀌어야 내논리상으로는 이해가 되는데 안바뀌고 걍 순회 시작할때마다 head(0번노드)부터 시작해서 뭔가 싶음 책봐도 걍 됨 이딴식으로만 나와 있어서 걍 코드 설명이 있지 설명다운 설명이 없음
ㄴ 헤드값의 메모리 주소값은 그대로인건 당연한걸텐데, next로 증가시킨 현재 주소값문제로 잘 이해가 안간다