구조체 (Structure)
구조체란? 「다른 형」의 데이터를 한데 모은 것 사용자 정의 자료형 (Data type) cf. 배열: 「동일한 형」의 데이터를 한데 모은 것 구조체에 의해 정리된 요소 하나하나를 멤버라고 한다. 사용자 정의 자료형 (Data type) 실세계 모델링에서 중요한 자료형
구조체의 선언 구조체 템플릿 선언 구조체 변수 선언 어떤 변수를 구조체로써 하나로 묶을 것인지 정의하는 일 예: struct employ { // employ : 구조체 템플릿 이름 int no; // 멤버 char name[10]; int age; } ; 구조체 변수 선언 실제 저장공간 확보 예: struct employ kim; // kim : 구조체 변수명
구조체의 활용1 구조체 변수에 대입 구조체 변수 참조 .연산자로 멤버 접근 예: kim.no = 3; strcpy( kim.name, “놀부”); kim.age = 40; 구조체 변수 참조 예: printf(“%d %s\n”, kim.no, kim.name);
구조체의 활용2 구조체 변수간에 대입 구조체내의 구조체 구조체 템플릿 이름이 같을 때, 멤버간 대입 불필요 다시말하며, 구조체 템플릿 구성은 같아도 이름이 다르면 구조체 변수간 대입 불가. 예: struct employ kim, someone; someone = kim; 구조체내의 구조체 예: struct lab { float temperature; int table; struct employ manager; } ;
구조체와 포인터 멤버 접근 외에는 일반 포인터 사용법과 같다 포인터를 사용한 구조체의 참조 예: struct employ kim = { 3, “놀부”, 40 }; // 초기화 struct employ *sp; sp = &kim; // 구조체 포인터 sp가 구조체 변수 kim을 지시하게 된다. 포인터를 사용한 구조체의 참조 연산자로 멤버 참조 예: printf(“%d %s\n”, spno, spname);
구조체와 함수 값의 전달 (Call by Value) 참조 전달 (Call by Reference) 예: struct employ kim; print_employ( kim ); 함수의 원형 선언 : void print_employ( struct employ); 참조 전달 (Call by Reference) 예: struct employ kim, lee; swap( &kim, &lee ); 함수의 원형 선언 : void swap( struct employ*, struct employ*);
구조체의 배열 구조체 배열을 선언할 수 있다. 기본 구문 예: struct employ list[3] { { 1, “놀부”, 40 }, { 2, “흥부”, 38 }, { 3, “홍길동”, 29 } } ; // 구조체 배열의 초기화 기본 구문 예: for( i=0; i<3; i++) { printf( “ %d %s %d\n”, list[ i ].no, list[ i ].name, list[ i ].age); }
Byte Align 구조체에서 아래 구조체와 같이 char a, int b 순으로 선언되면, b는 1B이지만, 그 다음에 3B에 0으로 더 채워진 후 d가 시작된다. (padding) 왜냐하면 int형은 4의 배수 (int 가 32bit 일 경우) 지점에서 시작하도록 되어 있으며, 이를 Byte Align 이라고 한다. ( double형은 8B이고, 8의 배수지점에서 시작 struct balign { char a; int b; } ;
Byte Align 왜? Byte Align 변경 #pragma pack(1) : 1B단위로 Byte Align 실습: sizeof( )로 Byte Align이 바뀌었을 때 구조체의 크기 관찰?
실세계 모델링 버스를 구조체로 구현하시오. 버스의 멤버는 3개로 버스명(문자열), 기름의 양(정수형), 승객 인원수(정수형)이다. 구조체 변수를 생성하고, 3개의 멤버를 화면 입력 받고 출력하는 프로그램을 구현하시오. [적절한 변수명을 줄 것] 입력예: 버스명 > 기름(리터) > 승객(명) > 출력예: 버스명 : 광역버스2000번 기름 : 50 리터 승객 : 15 명
실습과제 (요구사항) 직원 10명의 정보를 입출력 할 수 있는 시스템을 원한다. 입출력은 화면으로 가능하면 된다. 파일 입출력 불필요. 직원 정보는 사번, 이름, 나이 정도면 된다. 직원 정보는 구조체로 구현한다. 일련번호로 검색해서 직원 정보를 보는 기능이 있다. 직원 입력은 신규 인원이 충원될 때 마다 입력하고 싶다.
End