은근한

C언어 11. 공용체 및 열거체(union,enum) 본문

카테고리 없음

C언어 11. 공용체 및 열거체(union,enum)

EsJoo 2013. 11. 6. 19:19

공용체


여러 벰버들이 메모리를 공유한느 것이 바로 공용체이다.


구조체의 멤버들은 메모리에 순차적으로  할당되는데 비해 공용체의 멤버들은 모든 멤버의 주소가 같다. 


따라서 공용체의 멤버들은 메모리를 공유하게 된다.



* 주의할점은


여러멤버가 메모리를 공유하기 때문에 한 멤버의 값을 변경하면 다른 멤버의 값이 함께 변경된다.




공용체의 정의


형식


union 태그명{

데이터형 멤버형;

데이터형 멤버형;

데이터형 멤버형;

...

};


ex)

union data{

unsigned long dword;

unsigned char byte[4];    //공용체 멤버

};


공용체를 일단 정의하면 공용체도 새로운 데이터형이 된다. 공용체 변수를 메모리에 할당하면 


공용체의 멤버들이 모두 같은 주소에 할당된다. 공용체의 멤버에 접근할 때도 멤버 접근 연산자인 .(마침표)를 사용한다.


ex) 공용체의 사용예


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
 
union data{
    unsigned long dword;
    unsigned char byte[4];
    };
    
void main()
{
    union data d1;
    int i;
    
    printf("data 공용체의 크기 i%d\n",sizeof(union data));
    d1.dword = 0x12345678;
    printf("d1.dword = %08x\n",d1.dwrod);
    for(i=0;i<4;i++)
    printf("d1.byte[%d]=%02x\n",i,d1.byte);
    }



공용체의 멤버들은 동시에 사용되지 않는다. 위의 예저와 같이 dword 멤버에 값을 저장하고,

그 값을 byte 멤버로는 읽어서 사용만 한다. 공용체를 이용하면 같은 값을 다른 의미로 해석해서 접급할 수 있다.

구조체의 모든 멤버들이 동시에 사용될 필요가 없을때 공용체가 유용하게 쓰인다.



열거체,열거형

열거체 정의

형태

enum 태그명 {열거상수1,열거상수2,열거상수3....};

ex)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
 
enum week {sun,mon,tue,wed,thu,fri,sat};  //열거체 정의
 
void main()
{
    enum week weekday;     //열거체 변수의 선언
    
    weekday = mon; //열거 상수 사용
    
    switch (weekday)
    {
        case sun: printf("일요일이다.\n");break;
        
        case mon: printf("월요일이다.\n");break;
        ..
        ..
        
        
    }
 
    }