c언어 - 공용체

공용체는 union 키워드로 정의하며 멤버 중에서 가장 큰 자료형의 공간을 공유

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 공용체 정의하기
union 공용체이름 {
    자료형 멤버이름;
};
 
// 공용체 변수 선언하기
union 공용체이름 변수이름;
 
// 공용체를 정의하는 동시에 변수 선언하기
union 공용체이름 {
    자료형 멤버이름;
} 변수;
 
// 공용체를 정의하면서 공용체 별칭 정의하기
typedef union 공용체이름 {
    자료형 멤버이름;
} 공용체별칭;
 
// 익명 공용체 정의하기
typedef union {
    자료형 멤버이름;
} 공용체별칭;
 
// 공용체 별칭으로 변수 선언하기
공용체별칭 변수이름;
cs

1
2
3
4
5
6
7
8
9
10
// 공용체 포인터에 동적 메모리 할당
struct 공용체이름 *포인터이름 = malloc(sizeof(union 공용체이름));
 
// 공용체 별칭으로 포인터를 선언하고 동적 메모리 할당
공용체별칭 *포인터이름 = malloc(sizeof(공용체별칭));
 
포인터->멤버;         // 공용체 포인터 멤버의 값을 가져옴
포인터->멤버 = 값;    // 공용체 포인터 멤버에 값을 저장
 
free(포인터);    // 공용체 메모리 해제
cs


공용체와 구조체 함께 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
struct 구조체A {
    자료형 멤버이름;
};
 
struct 구조체B {
    자료형 멤버이름
    struct 구조체A 멤버이름;    // 구조체A를 멤버로 가짐
};
 
struct 구조체B 변수이름;
 
변수.멤버.멤버          // 구조체 안의 구조체 멤버 값을 가져옴
변수.멤버.멤버 = 값;    // 구조체 안의 구조체 멤버에 값을 저장
cs

익명 구조체와 익명 공용체를 함께 사용하면 같은 값이지만 이름과 형태를 달리하여 접근할 수 있음.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct 구조체이름 {
    union {              // 익명 공용체
        struct {             // 익명 구조체
            자료형 멤버이름A;     // 변수로 접근할 때 사용
            자료형 멤버이름B;
            자료형 멤버이름C;
        };
        자료형 배열이름[3];   // 배열로 접근할 때 사용
    };
};
 
struct 구조체이름 변수이름;
 
변수.멤버A;       // 같은 값을 변수로 접근
변수.배열[0];     // 같은 값을 배열의 인덱스로 접근
cs

공부 : c언어 코딩도장

댓글