/*
포인터 문
주절주절
주절주절
주절주절
*/
형식으로 글 중간에 써 놓았습니다.
사랑으로 님이 쓰신 글 :
: struct film {
: char title[45];
: int rating;
: struct film * next;
: };
:
: int main(void)
: {
: struct film * head = NULL;
: struct film * prev, * current, * rear; <---선언해놓고 어디서 사용했는지도 구분이 않됩니다
: char input[45];
:
: puts("첫 번째 영화 타이틀을 입력하시오:");
: while (gets(input) != NULL && input[0] != '\0')
: {
: current = (struct film *) malloc(sizeof(struct film));
: if (head == NULL) /* 첫 번째 구조체 */
: head = current;
: else /* 연결된 구조체들 */
: prev->next = current;
/*
prev->next = current;
if에선 처음 while이 돌 때, head를 채웁니다.
그리고 else에선 head부터 시작해서 차근 차근,
next라는 포인터를 이용해서 구조체들을 연결하죠.
*/
: current->next = NULL;
/*
current->next = NULL;
단 하나의 자료만 저장할 때를 예상해서
구조체 내의 next포인터를 잠굽니다.
나중에 연결하는 동작은 위의 prev->next = current;에서 하죠.
*/
: strcpy(current->title, input);
: puts("평가를 입력하시오(0점에서 10점까지):");
: scanf("%d", current->rating);
: while(getchar() != '\n')
: continue;
: puts("다음 영화 타이틀을 입력하시오(끝내려면 빈 라인):");
: prev = current;
/*
prev = current;
저 위의 else 문을 위해, 비어있는 포인터를 채웁니다.
prev->next를 사용하기 위해서 임의의 구조체로 채우는 것이죠.
*/
: }
:
: /* 목록 보여 */
: if (head == NULL)
: printf("입력된 데이터가 없습니다.\n");
: else
: printf("영화들의 목록은 다음과 같습니다.\n");
: current = head;
: while (current != NULL)
: {
: printf("영화: %s 평가: %d\n", current->title, current->rating);
: current = current->next;
/*
current = current->next;
간단한 문장입니다.
현재 current가 가리키고 있는 구조체를 예를 위해서 struct1 이라고 하고,
current내의 포인터 next가 가리키고 있는 구조체가 struct2라고 합시다.
그렇게 하면 위의 말은 즉 struct1= struct2 라는 문장으로 대체 할 수 있겠죠?
연결되어 있는 다음 구조체를 선택하는 문장입니다.
*/
: }
:
/*
이제 처음에 입력 받고, 출력까지 했으니, malloc를 이용해서 힙 영역에 잡은 메모리를 해제해 주어야 겠죠?
*/
: current = head; //첫번째 구조체(head) 를 current로 넣습니다.
: while (current != NULL) //current가 텅 빌때까지...메모리를 전부 해제할 때까지...
: {
: rear = current->next; //rear = current++
: free(current); // 메모리 해제
: current = rear; // . . .
: }
: printf("끝\n");
: return 0;
: }
:
: 자세한 주석좀 달아주세요....뭐가 뭔지 도무지 이해가 않됩니다.
|