안녕하세요. 이번에는 구조체 자료형의 크기에 대해 알아보겠습니다.
기본적으로 자료형의 크기를 알아보는 함수는 sizeof(자료형)입니다.
1 2 3 4 5 6 | typedef struct { int HP; int MP; char class; }user; | cs |
int는 4바이트, char은 1바이트
그러므로 user구조체의 크기는 9바이트라고 예상이 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include<stdio.h> typedef struct { int HP; int MP; char class; }user; int main() { user user1; printf("user1.HP의 크기 : %d \n", sizeof(user1.HP)); printf("user1.MP의 크기 : %d \n", sizeof(user1.MP)); printf("user1.class의 크기 : %d \n", sizeof(user1.class)); printf("-----------------------\n"); printf("user1의 크기 : %d \n", sizeof(user1)); } | cs |
user1.HP (int형)의 크기가 4바이트라고 출력되었고
user1.MP (int형)의 크기가 4바이트라고 출력되었고
user1.class (char형)의 크기가 1바이트라고 출력되었습니다.
그럼 user1의 크기는 9바이트가 되야하는데 실제로 측정해보니 12바이트가 나왔습니다.
구조체는 패딩비트(padding)라는 것을 사용하는데요, 패딩비트란 사용하지 않는 비트를 의미합니다.
실제적으로 이야기한다면
■■■■(user1.HP) ■■■■(user1.MP) ■□□□(user1.class)
(□ : 패딩비트)
이런식으로 가장 큰 자료형의 크기를 따라갑니다.
소켓통신으로 구조체를 보낼때 패딩비트를 생각하지않으면 이상한 값이 찍히게 됩니다.
'프로그래밍 언어 > C언어' 카테고리의 다른 글
C언어 #define, #if , #ifdef , #ifndef란 (0) | 2017.09.11 |
---|---|
매개변수(Parameter,파라미터),전달인자(Argument,아규먼트)란? (2) | 2017.09.01 |
C언어 구조체 사용하기. (0) | 2017.08.16 |
비트연산 사용법(BIT연산) (1) | 2017.07.26 |
C언어 include 사용법 (0) | 2017.05.29 |