본문 바로가기
Computer & Program/잡다한 이모저모

구조체, 공용체 종류 및 예

by TDRemon 2009. 3. 4.
반응형

//단순 구조체
#include<stdio.h>

struct score{
 char name[20];
 int kor, eng, mat;
};
typedef struct score Score;
void structPrint(char*, int, int, int);
void main()
{
 Score sd = {"Hong gil dong", 80, 90, 100};
 structPrint(sd.name, sd.kor, sd.eng, sd.mat);
}

void structPrint(char *cp, int i, int k, int j)
{
 printf("%s : %d, %d, %d\n", cp, i, k, j);
}


// 중첩 구조체
#include<stdio.h>

struct AA{
 int a;
 long b;
};

struct BB{
 int a;
 long b;
 struct AA c;
};

void main()
{
 struct BB su;
 su.a = 10;
 su.b = 20;
 su.c.a = 30;
 su.c.b = 40;

 printf("%d\n", su.a);
 printf("%ld\n", su.b);
 printf("%d\n", su.c.a);
 printf("%ld\n", su.c.b);

}

// 비트 필드 구조체
#include<stdio.h>

struct AA{
 int a : 3;
 unsigned int b : 4;
 int c : 2;
};
void main()
{
 struct AA su;
 su.a = 10;
 su.b = 10;
 su.c = -1;

 printf("%d\n", sizeof(su));
 //printf("%d\n", sizeof(su.a));
 //printf("%d\n", sizeof(su.b));
 //printf("%d\n", sizeof(su.c));
 printf("%d\n", su.a);
 printf("%u\n", su.b);
 printf("%d\n", su.c);
}

//공용체 : 메모리를 같이 쓰자
#include<stdio.h>

union abc{
 char a;
 short b;
 long c;
} value;

void main()
{
 value.c = 0x12345678;
 printf("%d\n", sizeof(value)); // 4byte
 printf("long value : %08lx\n", value.c);
 printf("short value : %08lx\n", value.b);
 printf("char value : %08lx\n", value.a);
}
공용체는 써보면 알겠지만 상당히 특이하다. 즉 한 메모리를 가지고 이놈 저놈이 다 같이 쓰자는 것이다. 기본적으로 가장 큰 공간을 가지고 있는 놈을 기준으로 작은놈이 앞에서부터 중첩되서 메모리공간을 사용하게 된다.

//공용체와 구조체의 혼용
#include<stdio.h>

struct str{
 char c1, c2, c3, c4;
};
union abc{
 struct str chr;
 char a; // 1byte
 short b; // 2byte
 long c; // 4byte
};
void main()
{
 union abc value;
 value.c = 0x12345678;
 printf("a = %08x\n", value.a); // 00000078
 printf("b = %08hx\n", value.b); // 00005678
 printf("c = %08lx\n", value.c); // 12345678
 
 printf("c1 = %08x\n", value.chr.c1); // 00000078
 printf("c2 = %08x\n", value.chr.c2); // 00000056
 printf("c3 = %08x\n", value.chr.c3); // 00000034
 printf("c4 = %08x\n", value.chr.c4); // 00000012
}
즉 가장 큰 long형과 struct str형을 받아 총 4byte짜리 방이 생성된다. 그리고 출력 결과값을 보면 메모리는 앞칸 방부터 | 78 | 56 | 34 | 12 | 순으로 저장됨을 알수가 있다.

반응형

댓글