본문 바로가기
c,c++,c#

[werun] union vs struct 구조체 차이점 & 중첩 구조체

by WeRun 2024. 11. 9.

Union vs Struct 차이점

1. 메모리 사용

- STRUCT: 모든 멤버가 각자의 메모리 공간을 가짐

- UNION: 모든 멤버가 같은 메모리 공간을 공유

 

struct Example

{

    int a;// 4byte

    char b;// 1byte

    double c;// 8byte

};//총 13 byte

 

union Example

{

    int a;// 4byte

    char b;// 1byte

    double c;// 8byte

};//총 8 byte

 

2. 데이터 접근:

- STRUCT: 모든 멤버에 동시에 다른 값을 저장 가능

- UNION: 한 번에 하나의 멤버만 유효한 값을 가질 수 있음

 

3. 주요 용도:

- STRUCT: 서로 관련된 다양한 데이터를 그룹화할 때 사용

- UNION: 메모리를 절약하거나 같은 메모리를 다른 방식으로 해석할 때 사용

 

Union vs Struct  중첩 구조체 사용 예

1. Struct - Struct

struct link1

{

  int b;

};

 

struct link2

{

  int a;

  link1 strlink;

};

 

a 접근: link2.a

b 접근: link2.link1.b

 

*a와 b는 주소값이 다르기 때문에 서로의 값에 영향을 안미침

 

2. Union - Struct

 

struct link1
{
  bool s1 : 1;
  bool s2 : 1;
  bool s3 : 1;
  bool s4 : 1;
  bool s5 : 1;
  bool s6 : 1;
  bool s7 : 1;
};

union link2
{
  DWORD link1_status;

  link1 strlink;
};

 

link1_status 와 strlink(link1)의 주소가 공유되므로,

link1의 전체 값을 알고싶으면 link1_staus로 접근하면되고, link1 개별 변수의 값을 알고 싶으면 link2.link1.s1~s7로 접근하면 됩니다.

 

이런식으로 union 내부 변수들이 같은 주소값을 쓰는 경우 응용 가능합니다.