공용체는 선언이나 사용방법이 구조체와 유사하지만 자료형이 다른 멤버들이 같은 메모리를 공유한다는 점이 다르다.
일반 구조체
결과
공용체
같은 주소를 쓰기 때문에 구조체와 나온 결과 값이 다르고 사이즈도 4바이트이다.
일반 구조체
#include <stdio.h>
typedef struct emb
{
unsigned int a;
unsigned short b;
unsigned char c;
}EMB;
int main()
{
EMB test;
test.a = 0x12345678;
test.b = 0xaaaa;
test.c = 0xbb;
printf("test.a = %08X\n", test.a);
printf("test.b = %08X\n", test.b);
printf("test.c = %08X\n", test.c);
test.a = 0x11223344;
printf("test.a = %08X\n", test.a);
printf("test.b = %08X\n", test.b);
printf("test.c = %08X\n", test.c);
printf("test의 사이즈 = %d\n", sizeof(test));
printf("test.a의 주소 = %08X\n", &test.a);
printf("test.b의 주소 = %08X\n", &test.b);
printf("test.c의 주소 = %08X\n", &test.c);
return 0;
}
typedef struct emb
{
unsigned int a;
unsigned short b;
unsigned char c;
}EMB;
int main()
{
EMB test;
test.a = 0x12345678;
test.b = 0xaaaa;
test.c = 0xbb;
printf("test.a = %08X\n", test.a);
printf("test.b = %08X\n", test.b);
printf("test.c = %08X\n", test.c);
test.a = 0x11223344;
printf("test.a = %08X\n", test.a);
printf("test.b = %08X\n", test.b);
printf("test.c = %08X\n", test.c);
printf("test의 사이즈 = %d\n", sizeof(test));
printf("test.a의 주소 = %08X\n", &test.a);
printf("test.b의 주소 = %08X\n", &test.b);
printf("test.c의 주소 = %08X\n", &test.c);
return 0;
}
결과
공용체
#include <stdio.h>
typedef struct emb
{
unsigned int a;
unsigned short b;
unsigned char c;
}EMB;
int main()
{
EMB test;
test.a = 0x12345678;
test.b = 0xaaaa;
test.c = 0xbb;
printf("test.a = %08X\n", test.a);
printf("test.b = %08X\n", test.b);
printf("test.c = %08X\n", test.c);
test.a = 0x11223344;
printf("test.a = %08X\n", test.a);
printf("test.b = %08X\n", test.b);
printf("test.c = %08X\n", test.c);
printf("test의 사이즈 = %d\n", sizeof(test));
printf("test.a의 주소 = %08X\n", &test.a);
printf("test.b의 주소 = %08X\n", &test.b);
printf("test.c의 주소 = %08X\n", &test.c);
return 0;
}
typedef struct emb
{
unsigned int a;
unsigned short b;
unsigned char c;
}EMB;
int main()
{
EMB test;
test.a = 0x12345678;
test.b = 0xaaaa;
test.c = 0xbb;
printf("test.a = %08X\n", test.a);
printf("test.b = %08X\n", test.b);
printf("test.c = %08X\n", test.c);
test.a = 0x11223344;
printf("test.a = %08X\n", test.a);
printf("test.b = %08X\n", test.b);
printf("test.c = %08X\n", test.c);
printf("test의 사이즈 = %d\n", sizeof(test));
printf("test.a의 주소 = %08X\n", &test.a);
printf("test.b의 주소 = %08X\n", &test.b);
printf("test.c의 주소 = %08X\n", &test.c);
return 0;
}
결과
같은 주소를 쓰기 때문에 구조체와 나온 결과 값이 다르고 사이즈도 4바이트이다.
'C 언어 > 임베디드 C' 카테고리의 다른 글
#pragma 지시어의 사용법 정리 (0) | 2011.11.16 |
---|---|
FILE 구조체 (0) | 2011.11.15 |
열거형 (0) | 2011.08.17 |
연결리스트 (0) | 2011.07.08 |
구조체를 함수의 인수로 전달하는 방법 (0) | 2011.07.07 |