C언어 부가 설명 - 구조체 연결리스트

2022. 1. 20. 19:39C언어

#include <stdio.h>
struct Person {
  char* name;
  struct Person* next;
};
// 수정가능지역 끝

int main(void) {


  struct Person p1;
  p1.name = "하나";

  struct Person p2;
  p2.name = "두나";

  struct Person p3;
  p3.name = "세나";

  // 수정가능지역 시작


  // 수정가능지역 끝

  printf("마지막 사람의 이름은 %s 입니다.", p1.next->next->name);
    return 0;
}

우선 출력해야 하는 곳에 문자열이 있는걸 확인하셨다면 char* 변수가 하나있어야 하구요. 다음 주소를 저장할 포인터 변수도 있어야겠네요!! 또한 next라는 이름을 가진애도 알아야하는데 next옆에 -> 연산자 보이실까요? -> 기호 왼쪽은 구조체주소라고 말씀드렸었죠. 근데 얘가 name도 갖고자 하네요? 그럼 같은 구조체다라는것을 알수있죠. 그렇다고 struct person next가 되면 되는것이냐? 아니죠 왜냐? 구조체가 같은이름의 같은 구조체 안에 구조체를 넣을수는 없습니다. 하지만 편법으로 *를 붙이면 자기참조 구조체가 가능합니다. printf("%s",p1.name); printf("%s",p2.name); 해도 하나두나가 나올텐데 우선 연결을 시켜줘야하니깐요. p1.next = &p2;를 해주면 p2.name에 p2대신 p1.next가 들어가도 될거고 일반적인 자료형이 아니라 구조체 주소니깐 .대신에 ->로 바뀌면 출력이 잘되겠네요.

728x90