#include <stdio.h>

// 1. 구조체 (struct)
struct MyStruct {
    char c;    // 1바이트
    int i;     // 4바이트
    double d;  // 8바이트
};

// 2. 공용체 (union)
union MyUnion {
    char c;    // 1바이트
    int i;     // 4바이트
    double d;  // 8바이트
};

int main() {
    struct MyStruct s;
    union MyUnion u;

    // --- 차이점 1: 메모리 크기 ---
    printf("=== 1. 메모리 크기 비교 ===\n");
    // 구조체는 모든 멤버 크기의 합 (+ 패딩 여백) -> 약 16바이트 또는 24바이트
    printf("struct의 크기: %lu 바이트\n", sizeof(s)); 
    // 공용체는 가장 큰 멤버(double)의 크기만 가짐 -> 딱 8바이트
    printf("union의 크기: %lu 바이트\n", sizeof(u)); 

    // --- 차이점 2: 값 덮어쓰기 (공유 현상) ---
    printf("\n=== 2. 공용체(union) 덮어쓰기 현상 ===\n");
    
    u.i = 100; // 정수 방에 100을 넣음
    printf("u.i 에 100을 넣은 후 u.i의 값: %d\n", u.i);

    u.d = 3.14; // 실수 방에 3.14를 넣음 (이 순간 같은 공간을 쓰는 u.i의 데이터가 파괴됨!)
    
    printf("u.d 에 3.14를 넣은 후 u.d의 값: %f\n", u.d);
    printf("u.d 에 3.14를 넣은 후 u.i의 값: %d (값이 망가짐!)\n", u.i);

    return 0;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: