1. [C 언어] 구조체
ㅇ 1 이상의 다른 데이터형을 갖는 변수들을 모아둔 집합체
2. [C 언어] 구조체의 사용 목적
ㅇ 여러 관련 변수들을 하나의 의미로 묶을 때 유용
ㅇ 특정 목적에 맞는 완전히 새로운 `사용자 정의 자료형`의 생성 등
3. [C 언어] 구조체의 특징
ㅇ 구조체의 강점 : 다채로운 데이터 표현 능력
- 단지 개별 변수,배열 만으로는 표현에 한계 있음
- 구조체는 다수의 데이터들을 표현할 수 있는 능력을 그 이상으로 향상시킴
ㅇ 구조체의 역할 : 일종의 데이터형 역할
- 개별 변수 보다는 레코드 형식의 변수에 대해, 일종의 데이터형으로의 역할도 가능
- 따라서, 구조체를 사용하여 새로운 데이터형도 만들 수 있음
ㅇ 구조체의 명명 규칙 : 통상적인 C 명명 규칙에 따름
- 변수명의 통상적인 C 명명 규칙에 따라 작성
- 단, 구조체 태그명(구조체이름)은, 대문자로 시작함이 관례임
ㅇ 구조체의 확장 : 클래스 (캡슐화)
- 바로 객체지향언어인 C++에서의 클래스 임
4. [C 언어] 구조체의 정의,선언
※ ☞ 구조체 정의 및 선언 참조
- 구조체 정의 : 구조체 구성 정보를 자세하게 컴파일러에게 알려 줌
- 구조체 선언 : 구조체 변수를 만들어 실제 기억 공간을 확보/할당하게 됨
ㅇ 구조체의 선언,정의의 프로그램 내 위치는?
- 통상, 프로그램 내 main 함수 밖에 위치시킴
- 만일, main 함수 내 위치하면, 그 안에서 만 사용 가능
5. [C 언어] 구조체의 메모리 확보 및 구조체 포인터의 선언
ㅇ 동적 메모리 할당에 의해, 구조체의 메모리 확보 가능
- (형식) malloc(sizeof(struct 구조체명))
ㅇ 확보된 동적 메모리에 대한, 구조체 포인터의 선언
- (형식) struct 구조체명 *구조체포인터명 = malloc(sizeof(struct 구조체명));
. 즉, 구조체에 할당된 결과적인 메모리 위치를, `구조체 포인터`로 가리키게 됨
6. [C 언어] 구조체의 멤버 (구성요소)
ㅇ 구조체의 구성 요소 : 멤버 또는 필드 라고도 함
- 구조체 멤버의 예는, 변수,배열,포인터 또는 다른 구조체 일 수도 있음
- 한편, C++에서는 함수도 멤버로써 가능
ㅇ 구조체 멤버(구성 요소)로의 접근
- ① 일반 구조체의 멤버 접근 : 도트(.) 연산자 사용
. 형식) 구조체명.요소명;
- ② 구조체 포인터로 멤버 접근
. ⑴ 구조체 포인터의 화살표 연산자(->)에 의해, 해당 구조체의 멤버 접근
.. 형식) 구조체포인터명->요소명;
. ⑵ 구조체 포인터의 역참조에 의해, 해당 구조체의 멤버 접근
.. 형식) (*구조체포인터).요소명
- ③ 구조체의 멤버가 포인터일 때의 멤버 접근
. 형식) *구조체변수.멤버 또는 *구조체포인터.멤버
7. [C 언어] 참고사항
ㅇ 구조체의 초기화 형식
- struct 구조체태그명 구조체변수명 = { .멤버명1=값1, .멤버명2=값2, .멤버명3=값3, ... };
- 또한, 멤버명 없이도 가능하나, 이때는 정의된 순서가 같아야 함
. struct 구조체태그명 구조체변수명 = { 값1, 값2, 값3, ... };
ㅇ 구조체의 복사/복제
- 단지 구조체 변수들 만으로,
- 대입문(a = b = c;)에 쓰면,
- 해당 구조체 내 모든 요소들이 복제됨
ㅇ 구조체의 배열 선언
- struct 구조체태그명 구조체배열변수명[크기];
. 구조체배열변수명 : 구조체태그명으로 선언된 구조체들을 원소로 갖는 배열명
ㅇ 구조체의 메모리 저장(정렬, alignment)
- 다수의 이질적인 멤버들을 갖는 구조체가 메모리에 저장,정렬이 될 때
- 통상, 가장 큰 크기의 자료형을 갖는 멤버의 정렬 크기 단위로 정렬이 됨
- 만일, 이보다 작은 크기를 갖으면, 나머지는 `0`값으로 패딩 처리됨