1 구조체 윤 홍 란
컴퓨터 프로그래밍 2 구조체 정의 구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의 정의 ostruct card 자료형은 생성되나 메모리는 할당되지 않음. struct card { int pips; char suit; }; struct card c1, c2; struct card { int pips; char suit; } c1, c2; pips : 1 ~ 10, 11(J), 12(Q), 13(K) suit : 'c'(clubs) suit : 'd'(diamonds) suit : 'h'(hearts) suit : 's'(spades)
컴퓨터 프로그래밍 3 구조체 정의 구조체 (structure) 는 관련된 여러 가지의 데이터형을 하나의 그룹으로 묶어 마치 하나의 변수처럼 다룰 수 있게 하는 것. 구조체의 장점 o 연관된 데이터 요소를 조직 o 파일 입출력을 단순화 o 함수 인수의 수를 최소화 o 메모리 할당에 특별한 순서를 줄 수 있다. o 프로그램을 더욱 읽기 쉽게 한다.
컴퓨터 프로그래밍 4 구조체 멤버에의 접근 구조체 멤버 접근 연산자 (.) 사용. c1.pips = 3; c1.suit = 's'; c2 = c1;/* c1 과 c2 는 같은 card */ struct fruit { char *name; int calories; }; struct vegetable { char *name; int calories; }; struct fruit a; struct vegetable b; /* a.calories 와 b.calories 는 구분됨.*/
컴퓨터 프로그래밍 5 typedef 의 사용 구조체와 같이 사용되어 새로운 타입을 만들 수 있다. ocard 가 새로운 타입의 이름이 된다. typedef struct card card; card c3, c4, c5; typedef struct emrec{ char name[50]; char addr[100]; char num[9]; int salary; }employee; /*employee 가 새로운 타입의 이름 */ employee typist, emp;
컴퓨터 프로그래밍 6 구조체배열 (array of structure) typedef 의 사용 struct card { int pips; char suit; }deck[52]; /* deck 은 struct card 의 배열 */ typedef struct { float re; float im; } complex; complex a, b, c[100];
컴퓨터 프로그래밍 7 #define CLASS_SIZE 100 struct student { char *last_name; int student_id; char grade; }; struct student temp, class[CLASS_SIZE];.... tmp.grade = 'A'; tmp.last_name = "Casanova"; tmp.student_id = ; 구조체 멤버에의 접근
컴퓨터 프로그래밍 8 구조체의 메모리구조 구조체의 메모리 구조는 멤버 순으로 연속적인 메모리를 사용. struct person { char name[10]; char address[40]; int age; }; struct person myfriend;
컴퓨터 프로그래밍 9 구조체 포인터 구조체를 참조 (access) 하기 위해 포인터를 사용할 수 있으며, 구조 체 포인터는 중요한 역할을 한다. 구조체 포인터의 장점 o 구조체에 대한 포인터는 구조체 그 자체보다 다루기 쉽다. o 구조체를 다른 함수에서 참조하기 쉽다. o 구조체의 포인터를 이용하여 특수한 데이터 표현이 가능하다. 포인터에 의해서 멤버를 참조하는 방법 정리 o 구조체 멤버 연산자.(dot) 를 이용하는 방법 o 구조체 포인터 연산자 -> 를 이용하는 방법 struct student { char *last_name; int student_id; char grade; } st1; struct student *st_p=&st1; st1.name == (*st_p).name ⇒ st_p - >name
컴퓨터 프로그래밍 10 선언문과 배정문 struct student tmp, *p = &tmp; tmp.grade = 'A'; tmp.last_name = "Casanova"; tmp.student_id = 수식 동등한 수식개념적 값 tmp.gradep -> gradeA tmp.last_namep -> last_nameCasanova (*p).student_idp -> student_id *p -> last_name + 1(*(p -> last_name)) + 1D *(p -> last_name + 2)(p -> last_name)[2]s구조체포인터 struct student { char *last_name; int student_id; char grade; };
컴퓨터 프로그래밍 11 구조체 포인터와 구조체 배열 #include struct person { char name[10]; char address[40]; int age; }; void main(){ struct person fr[4] = { {"Lee", "seoul", 2}, {"Park", "incheon", 30}, {"Kim", "pusan", 35}, {"Chio", "daegu", 22}}; struct person *ptr = fr; for (int j = 0; j < 4; j++) { printf("%s %s %d\n", ptr->name, ptr->address, ptr->age); ptr++; } /* 구조체 포인터의 증가는 다음 구조체 배열의 원소를 가리 킨다. */