구조체
구조체(Struct) 선언과 맴버 접근
구조체는 배열과 같은 사용자 정의 자료형(User-Defined Data Type)이다.
struct 키워드를 통해 구조체 자료형을 선언하고, 사용한다.
구조체 별칭(Alias)
typedef 키워드를 통해 struct name -> alias 로 간단히 사용한다.
구조체 동적할당
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 구조체 별칭과 포인터
int main(void)
{
typedef struct Person
{
char name[20];
char addr[50];
int age;
} as_;
as_ *ptr = malloc(sizeof(as_));
as_ a;
ptr = &a;
strcpy(ptr->name, "이순신"); // (*ptr).name
strcpy(ptr->addr, "한국"); // (*ptr).addr
ptr->age = 20;
printf("%s\n", ptr->name);
printf("%s\n", ptr->addr);
printf("%d\n", ptr->age);
free(ptr);
}
패딩 바이트
구조체의 요소는 같은 크기끼리 모아준다.
// 전체: 24 바이트 / 패딩: 12바이트 (7 + 5)
struct Test1 {
char a; // ⬛⬜⬜⬜⬛⬛⬛⬛ // 1바이트 [+ 7바이트 패딩]
double b; // ⬛⬛⬛⬛⬛⬛⬛⬛ // 8바이트
short c; // 2바이트
char d; // ⬛⬛⬛⬜⬜⬜⬜⬜ // 1바이트 [+ 5바이트 패딩]
};
// 전체: 16 바이트 / 패딩: 4 바이트
struct Test2 {
char a; // 1바이트
char d; // 1바이트
short c; // ⬛⬛⬛⬛⬜⬜⬜⬜ // 2바이트 [+ 4바이트 패딩]
double b; // ⬛⬛⬛⬛⬛⬛⬛⬛ // 8바이트
};
printf("%ld \n", sizeof(struct Test1)); // 24 Byte
printf("%ld \n", sizeof(struct Test2)); // 16 Byte
// 32bit(4Byte) OS 🔲블럭 읽기
CASE 1: ⬛🔳⬜⬜ 🔲🔲🔲🔲 // 1번
CASE 2: ⬛⬜⬜⬜ 🔲🔲🔲🔲 🔳⬜⬜⬜ // 공백 필요
CASE 3: ⬛🔳🔲🔲 🔲🔲 // 2번