제 9 장 구조체와 공용체
목 차 구조체의 정의와 선언 typedef와 구조체 공용체 구조체와 비트처리
구조체의 정의와 선언(1) 하나의 이름으로 여러형의 변수를 집합화 일종의 레코드 구조체의 선언 멤버 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차원 배열을 초기화하는 방법과 유사 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 struct list man; man person;
공용체 구조체와 비슷한 형식 선언문자 union 사용 가장 큰 멤버의 메모리를 할당 후 공용 예 메모리 할당 구조 union list { char a, int b, float c} man; 메모리 할당 구조
구조체와 비트 처리 비트 단위 자료 처리하는 비트 필드(bit field) 기능 이용 ON이나 OFF의 값 메모리의 낭비 형식 struct 구조체명{ 멤버1 : 비트길이; ... 멤버n : 비트길이; }