|
남병철.레조 님이 쓰신 글 :
:
: 안녕하세요? 레조입니다.
:
: -> 든 . 이든 모두 내부 멤버를 가리키기 위한 방법입니다.
: 구조체를 보면 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 라는 포인터의 주소값이 되게한다는 의미인가요? 아니면 그냥 단순
: : 링크트 리스트의 흐름을 표시할 뿐인가요?
: :
: : 아휴 답답해.... 이 게 막히니 다른 것도 이해가 안 되네요. 허접스런 질문인지
: : 모르겠지만 답변을 부탁드립니다.
: : 감사합니다.
|