|
안녕하세요? 레조입니다.
-> 든 . 이든 모두 내부 멤버를 가리키기 위한 방법입니다.
구조체를 보면 next는 person의 포인터이겠지요?
즉 new->next = head;은 head의 포인터를 next에 넣겠다는 것입니다.
그럼 head와 new->next는 같은 포인터를 공유하게되겠지요.
그이후에 head = new; 이렇게하면 head의 포인터는 지워지고 new의 포인터가
들어가겠네요.
즉, new == new->next == head가 되네요.
보통 메모리를 잡아서 사용하므로 head가 new가 되어도 메모리 상에 new->next(=head)
가 여전히 남아있고 또 가리키고도 있으니 head는 링크드리스트상 이동을 의미하겠네요.
물론 여기서는 어디서있다가 new로 이동한 경우가 되겠네요.
malloc 또는 new 연산자를 이용해서 메모리를 잡아놓고 링크(포인터)를 잃어버리면
그 프로그램이 살아있는한 그 메모리 영역은 미아가 되어버립니다.
(포인터 프로그램에서 자주있는 메모리 누수가 되겠지요... 자바의 가비지컬렉션은 이런
누수된걸 알아서 처리(삭제)해주니 편하다 하는것이겠네요.)
또치 님이 쓰신 글 :
: 개인적으로 C를 공부하고 있는데요... Linked List에서
: 영 진도가 안 나가고 있어요. ㅠ,.ㅠ
:
: 그 이유는 아무래도 "->"의 의미를 잘 몰라서 그런 것 같아요.
:
: 예를 들어서 다음과 같은 형태의 구조체가 있다고 했을 때,
:
: struct person {
: char name[20];
: struct person *next;
: };
:
: struct person *new;
: struct person *head;
: head=NULL
:
: 링크트 리스트의 시작 부분에 링크를 추가하기 위해서,
:
:
: new=(person *)malloc(sizeof(struct person));
: new->next=head;
: head=new;
:
: 위와 같이 작업을 하는데요, "new->next=head"의 "->"의 의미를 잘
: 모르겠어요. 어줍잖게 알기로는 "new가 next를 가르키도록 한다"라는
: 의미라고 들었는데요, 그래도 명확하지가 않아요. Pointer new가 가르키던
: 주소값을 next 라는 포인터의 주소값이 되게한다는 의미인가요? 아니면 그냥 단순
: 링크트 리스트의 흐름을 표시할 뿐인가요?
:
: 아휴 답답해.... 이 게 막히니 다른 것도 이해가 안 되네요. 허접스런 질문인지
: 모르겠지만 답변을 부탁드립니다.
: 감사합니다.
|