구조체
C언어 자료형 : 일정 길이의 memory에 저장된 정보를 해석하는 방법
배열 : 동일 형식(자료형)의 연속(연접)된 '집합체'
↓
구조체 : 서로 같거나 다른 형식들의 연속된 '집합체'
공용체 : 한 자료-같은 크기-에 여러 해석 방법을 부여하는 문법
즉, 구조체 => 자료형을 세트화 한 것
구조체를 매개변수로 전달할 때에는 주소를 전달하자. (오버헤드가 크다.)
구조체 맴버로 구조체를 넣는 것이 가능하다.
구조체의 맴버로 자기자신의 포인터를 넣기도 하는데, 이를 자기 참조 구조체 라고 한다. -> Linked list
구조체 맴버 맞춤
visual studio 컴파일러가 디폴트로 구조체의 맴버를 자르는 단위는 8byte 이다. 그렇기에 그보다 크기가 적은 멤버도 8byte의 크기는 무조건 할당받게된다.
이를 #pragma pack(push, 1) ~~ #pragma pack(pop) 과 같은 방식으로 1byte 단위로 바꿀 수 있는데
구조체를 통째로
- 파일에 저장하거나 읽어오는 경우
- 네트워크로 전송하거나 수신하는 경우
맴버 맞춤에 의한 오류가 발생할 가능성이 존재한다.
bit filed
구조체 맴버를 bit 단위로 할당하는 방법
공용체
한 가지 자료에 대해 여러가지 해석방법(자료형)을 부여하는 문법
연습문제)
1) 다음 예제의 실행결과와 이유는 무엇입니까.
#include <stdio.h>
typedef struct USERDATA
{
char ch;
int nAge;
} USERDATA;
typedef struct MYDATA
{
char ch;
int nAge;
double dData;
} MYDATA;
int main(void)
{
printf("%d\n", sizeof(USERDATA) );
printf("%d\n", sizeof(MYDATA));
return 0;
}
Q )
visual studio는 구조체 맴버의 크기를 8byte 단위로 할당하기 때문에 USERDATA는 char가 1byte, int 가 4byte 이므로 둘다 8byte가 안돼 8byte를 반으로 나눠 4byte로 쪼갠 후 그곳에 각각 할당한다.
그렇기 때문에 8이 출력된다.
또한 MYDATA는 char ch와 int nAge 가 합쳐져 8byte가 되고, 거기에 double 은 애당초 8byte 이므로 총 16byte가 되서 16이 출력된다.
2) 자기 자신에 대한 포인터를 멤버로 갖는 구조체를 무엇이라 하는지 쓰세요.
Q )
자기 참조 구조체 (Linked list에 주로 쓰인다.)
- 출처 : 독하게 시작하는 C 프로그래밍 (최호성, 루비 페이퍼)
'Programming > C language' 카테고리의 다른 글
Chapter 15. 변수와 상수 고급 이론 (0) | 2017.07.04 |
---|---|
Chapter 14. 파일 입출력 (0) | 2017.07.03 |
Chapter 12. 함수 응용 (문제풀이) (0) | 2017.06.30 |
Chapter 12. 함수 응용 (내용 요약) (0) | 2017.06.30 |
Chapter 11. 메모리와 포인터 (문제풀이) (0) | 2017.06.29 |