본문 바로가기

C 언어/임베디드 C

공용체(메모리 겹쳐쓰기를 허용)

공용체는 선언이나 사용방법이 구조체와 유사하지만 자료형이 다른 멤버들이 같은 메모리를 공유한다는 점이 다르다.

일반 구조체
#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;
}

결과





공용체

#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;
}


결과



같은 주소를 쓰기 때문에 구조체와 나온 결과 값이 다르고 사이즈도 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