구조체(7-3-1) 예제
포인터 c는 연결 리스트에서 첫 번째 student 구조체의 주소를 저장하는 데 사용된다.
이 첫 번째 구조체의 주소가 있어야만 다른 연결된 구조체들을 찾아 갈 수 있다.
두 개의 student 구조체 변수를 선언했으며, 첫 번째 student 구조체의 주소가 c에 대입된다.
그런 다음 첫 번째 구조체의 멤버 변수 next에 두 번째 student 구조체의 주소를 저장한다.
두 번째 student 구조체의 멤버 변수 next에는 다음에 연결될 구조체가 없으므로 NULL을 대입해준다.
이러한 포인터를 사용하여 데이터들을 서로 연결고리로 연결한 것 같은 구조가 연결 리스트이다.
연결 리스트에서는 첫 번째 구조체의 주소만 알면 다른 구조체들에 접근할 수 있다.
즉, c의 주소에 먼저 접근한 뒤 멤버 변수 next를 찾아 다음 구조체의 주소를 얻고,
여기서 또 멤버 변수 next에 저장된 값을 이용하여 다음 구조체의 주소를 얻는다.
이런 식으로 계속 반복하게 되면 원하는 구조체를 찾을 수 있다.
참고로 맨 마지막 구조체의 자기 자신을 가리키는 포인터에는 NULL값이 저장되어야
더 이상 연결되는 다음 구조체는 없다 라고 알 수 있다.
위 예제 코드에서while 루프는 연결 리스트에서 데이터를 차례대로 가져오는 전형적인 예시이다.
포인터 d는 루프에서 사용되는 구조체 포인터로 처음에는 c로 설정되어있다.
이는 위 코드에서 d = c; 부분을 보면 이해 할 것이다.
루프는 연결 리스트의 첫 번째 구조체부터 차례대로 접근하여,
첫 번째 구조체부터 차례대로 구조체의 멤버 값을 출력한다.
출력이 끝나면 next에 저장된 다음 구조체의 주소를 d에 대입하여 다음 구조체로 넘어간다.
이 코드는 d = d -> next; 부분을 보면 이해갈 것이다.
이 while루프는 d가 NULL값이 될 때까지 계속된다.
d가 NULL 값이 되면 이전 구조체의 next 값이 NULL 값이었다는 것을 의미하고,
이전 구조체가 마지막 구조체라는 것을 의미한다.
그리고 루프는 종료된다.
'시작하지 말았어야 했던 것 > C언어 기본 문법' 카테고리의 다른 글
구조체(7-4) 자기 자신을 가리키는 포인터 (0) | 2021.02.06 |
---|---|
구조체(7-3) 포인터를 멤버로 가지는 구조체 (0) | 2021.02.06 |
구조체(7-2)구조체를 가리키는 포인터 예제 (6) | 2021.02.06 |
구조체(7) 구조체와 포인터 & 간접 멤버 연산자 (2) | 2021.02.06 |
구조체(6-1) 구조체의 배열 예제 (0) | 2021.02.06 |