제 9 장 구조체와 공용체
목 차
구조체의 정의와 선언
typedef 와 구조체
공용체
구조체와 비트처리
구조체의 정의와 선언 (1)
하나의 이름으로 여러형의 변수를 집합화
일종의 레코드
구조체의 선언
struct 식별자로서 구조체명 { 멤버 1 의 선언문 ; 멤버 2 의 선언문 ; 멤버 3 의 선언문 ; ...
멤버 n 의 선언문 ; };
구조체의 정의와 선언 (2)
구조체 선언 예와 메모리 구조
struct list {
char initial ; char sex ; int age ; };
구조체의 정의와 선언 (3)
구조체의 정의
이미 선언된 구조체에 값을 할당하기 위한 것
일종의 변수를 선언하는 것
2 가지의 방법이 있음
구조체 선언과 구조체 변수 선언을 동시 수행
struct list { char sex;
int age;
} a, b, c;
구조체를 선언하고 별도로 정의
struct list a, b, c;
구조체의 정의와 선언 (4)
구조체 변수의 초기화
1 차원 배열을 초기화하는 방법과 유사
각각의 초기값이 대응 구조체 멤버 자료형과 일치
배열형 멤버의 배열 크기는 절대 생략 불가
구조체 배열 자체의 배열 크기는 생략이 가능
초기화가 이루어지지 않는 경우 0 으로 초기화
struct list a = {'C', 'M', 36};
구조체의 정의와 선언 (5)
멤버 변수 접근
정적 변수일 경우 접근연산자 ‘ .’ 기호 사용
struct list main_list;
main_list.sex='F';
또 다른 방법으로 '->' 기호를 사용
정의 변수를 포인터를 이용하여 정의했을 경우
struct list *p_a;
p_a->sex='F';
구조체의 정의와 선언 (6)
구조체 배열과 포인터
구조체 배열
형식
struct 태그명 { 멤버 선언문 } 배열 ;
또는
struct 태그명 배열 ;
예
sturct list {
char name [10];
char sex;
int age;
} man [60];
또는
struct list man[60] ;
구조체의 정의와 선언 (7)
구조체 배열과 포인터 ( 계속 )
구조체 배열 ( 계속 )
초기화
형식
struct tag_name 배열 = { { … }, { … },
{ … }, … } ;
예
struct list man []={ { ‘C', ‘M', 36 }, { 'K', 'F', 33 } { 'H', 'F', 8 } } ;
구조체의 정의와 선언 (8)
구조체 배열과 포인터 ( 계속 )
구조체 배열 ( 계속 )
구조체 배열의 메모리 할당 ( 예제 9-4)
구조체의 정의와 선언 (9)
구조체 배열과 포인터 ( 계속 )
구조체 포인터
원소가 구조체로 된 배열과 포인터에서 배열명은 0 번째 인 원소의 주소
형식
struct 태그명 * 선언자 ;
예
struct man[];
struct man *ptr;
ptr=man;
man[] 의 0 번지째 원소의 번지를 포인터 ptr 에 지정
구조체의 정의와 선언 (10)
구조체 배열과 포인터 ( 계속 )
구조체 포인터 ( 계속 )
접근 연산자
“.” 사용 (ptr).age
“->” 사용
ptr->age
구조체의 정의와 선언 (11)
구조체의 중첩
구조체 안에 또 다른 구조체를 선언
예
struct subject { int C;
int OS;
int DS;
};
struct student { char name[10];
long int st_no;
struct subject score;
};
typedef 와 구조체 (1)
typedef 선언
자료형 이름을 사용자가 임의 설정 할 때 사용
#define 명령어 이용 가능
typedef vs #define
typedef 는 심볼 명칭의 값으로 자료 type 만을 취함
typedef 의 기능은 C 컴파일러에 의해서 처리
typedef 는 #define 보다 다양한 형태의 치환이 가능
형식
typedef 자료형 변경할 형 ;
예
typedef double DWORD;
typedef 와 구조체 (2)
typedef 를 이용한 구조체 선언
typedef 다음에 구조체임을 struct 기술
형식
typedef 구조체명 새로운 구조체형
예
typedef struct list man;
man person;
공용체
구조체와 비슷한 형식
선언문자 union 사용
가장 큰 멤버의 메모리를 할당 후 공용
예
union list { char a, int b, float c} man;
메모리 할당 구조
구조체와 비트 처리
비트 단위 자료 처리하는 비트 필드 (bit field) 기능 이용
ON 이나 OFF 의 값
메모리의 낭비
형식
struct 구조체명 {
멤버 1 : 비트길이 ; ...
멤버 n : 비트길이 ; }