구조체와 포인터 참고자료 (1)
1
공부할 내용
구조체 안에 포인터 두기
변수를 가리키는 포인터
배열의 원소를 가리키는 포인터
구조체 변수를 가리키는 포인터
자신과 같은 형의 구조체 변수를 가리키는 포인터
구조체 리스트 만들어 활용하기
구조체 변수를 가리키는 포인터 활용
구조체 리스트 생성과 출력
함수에 구조체 변수를 파라미터로 보내기 (const 사용)
2
복습: 구조체를 가리키는 포인터
3
struct student s1, s2, s3;
s1 s2 s3
struct student *p, *q, *r;
p q r
(1) 포인터 p 가 s1 을 가리키도록 하시오. p = &s1;
(2) 포인터 q와 r이 각각 s2와 s3를 가리키도록 하시오. q = &s2; r = &s3;
(예제1) 학생들의 학과 주소 저장과 출력
student 구조체는 학생의 이름과 학과 주소를 저장한다.
컴퓨터공학과의 김이화 학생과 환경공학과의 홍이화 학생의 정보를 저장 하고자 한다. 이를 위해 student 구조체 변수 s1과 s2를 생성하고, 아래 그 림과 같은 정보를 저장한 후, 그 정보를 화면에 그대로 출력해 보시오.
4
5
(예제1) 프로그램
(예제2) 학과 주소를 배열에 별도 저장
컴퓨터공학과와 환경공학과의 주소를 별도의 배열에 저장해 놓았다고 하자.
(예제1)의 프로그램에서 student 구조체를 다음과 같이 수정해 보시오.
SchoolAddress 는 학과 주소가 저장되어 있는 배열을 가리킨다.
6
s1 김이화
s2 홍이화
서울특별시… 컴퓨터공학과 서울특별시… 환경공학과
(예제2) 프로그램
7
(예제3) 학과 주소를 구조체에 저장
컴퓨터공학과와 환경공학과의 주소를 별도의 구조체 변수에 저장한다.
앞의 프로그램에서 student 구조체를 다음과 같이 수정해 보시오.
SchoolAddress 는 학과 주소가 저장되어 있는 구조체 변수를 가리킨다.
8
s1 김이화
s2 홍이화
서울특별시…
컴퓨터공학과
서울특별시…
환경공학과 dept
student
(예제3) 프로그램
9
(예제4) 두 학생의 주소가 같을 때
(예제3)의 프로그램을 다음과 같이 수정하고자 한다.
박이화 학생은 김이화 학생과 학과 주소가 같다고 하자. 박이화 학생의 정보 를 담을 student 형 변수 s3을 정의하고 적절하게 초기화 해 보시오.
10
s1 김이화
s2 홍이화
서울특별시…
컴퓨터공학과
서울특별시…
환경공학과 student
s3 박이화
김이화 학생의 학과 정보를 활용하여 박이화 학생의 학과 정보를 초기화 하려는 것입니다.
(즉, 포인터 대입)
11
(예제4) 프로그램
(예제5) 학생 구조체의 정의
다음과 같이 학생 구조체를 선언하자.
12
구조체 안에 “동일한 형의” 구조체 포인터를 정의하는 이유는
10쪽의 그림과 같이 구조체 변수들을 연결하려고 하기 때문입니다.
(예제5) 학생 정보 생성하기
옆의 그림에서와 같이
박슬기 학생의 레코드(구조체)를 생성해 보자.
(힌트)
#include <string.h>
strcpy(s1.name, “박슬기”);
s1.year = sophomore;
s1.next = &s2; 또는 s1.next = NULL;
13
(예제5) 프로그램
14
(예제6) 학생 정보 출력하는 함수
15
student 형의 변수 한 개를
파라미터로 받은 후, 그 변수에 저장된 값을 화면에 출력하는 함수를
(예제5)에서 작성한 프로그램에 추가하시오.
printStudent(STUDENT s){
}
(예제6) 프로그램
16
(예제7) 학생 리스트 만들어 보기
프로그램에서 다음과 같이 학생 레코드 (구조체) 들을 생성하고, 연결해 보자.
17
(실습7) 학생 리스트 출력해 보기
18
포인터가 가리키는 구조체 의 값을 바꾸지 않겠다.
19
(실습7) 프로그램
20