열거형(Enumerated Type)

저장이 가능한 값 자체를 정수의 형태로 결정한다. 사용형태는 구조체랑 비슷하다.


사용 형태 : 

enum (name)

{

~~~~

};


열거형 상수의 값이 결정되는 방식

enum color { A, B, C, D };

A=1, B=2, C=3 ... 0에서부터 시작하여 1씩 증가하는 형태

enum color { A=1, B, C=4,D};

B=2, D=5... 선언되어 있지 않은 값은 앞서 선언된 상수보다 1이 증가된 값이 할당


열거형의 유용함은 둘 이상의 연관이 있는 이름을 상수로 선언, 자료형의 이름을 생략한 형태로 열거형을 정의할 수도 있다.


'언어 > C' 카테고리의 다른 글

파일 입출력 -2  (0) 2016.03.13
파일 입출력 -1  (0) 2016.03.10
구조체 기초 (union, struct의 차이)  (0) 2016.03.07
escape sequence  (0) 2016.02.26
counting program  (0) 2016.02.18
Posted by 知彼知己百戰不殆
,

공용체(Union Type)의 정의와 의미

<구조체와 Union address, value 확인>

#include <stdio.h>
#include <stdint.h>

typedef struct {
    int a;
    int b;
    char c;
} number;

typedef union {
    int a;
    int b;
    char c;
    char d;
} utemp;

int main()
{
    number num1;
    utemp utem;
    utem.a=4;
    utem.b=6;
    utem.c='a';
    utem.d='b';
    printf("\n[STRUCT]\n"); 
    printf("size=%d\n",sizeof(num1));
    printf("size=%p\n",&num1.a);
    printf("size=%p\n",&num1.b);
    printf("size=%p\n",&num1.c);
    printf("\n[UNION]\n"); 
    printf("size=%d\n",sizeof(utem));
    printf("size=%p\n",&utem.a);
    printf("size=%p\n",&utem.b);
    printf("size=%p\n",&utem.c);
    printf("size=%p\n\n",&utem.d);
}


<struct 안의 union 공용체 address, value 확인>

#include <stdio.h>
#include <stdint.h>

typedef struct {
        int a;
        int b;
        char c;
union {
        int d;
        int e;
        char f;
};
        int g;

} number;

int main()
{
        number num1;
        num1.a = 1;
        num1.b = 2;
        num1.d = 4;
        printf("\n[STRUCT]\n");
        printf("size=%d\n\n",sizeof(num1));
        printf("b=%p\n",&num1.b);
        printf("c=%p\n",&num1.c);
        printf("d=%p\n",&num1.d);
        printf("e=%p\n",&num1.e);
        printf("f=%p\n",&num1.f);
        printf("g=%p\n\n",&num1.g);

}

struct 안에 union 선언을 한 경우 union 구조체 자체가 한 개의 메모리를 할당 받아서 사용함을 알 수 있다.


정의방식의 차이 :

struct선언 or union 선언

메모리 공간 할당되는 방식과 접근 결과 차이

1. 

sizeof로 구조체와 공용체(union) 찍어보면 각각 12, 4 출력

2. 

구조체 변수 - 구성 멤버는 각각 메모리 할당, 하지만 그 구조체 내부의 변수 타입중 가장 큰 놈의 사이즈로 모두 할당해버림.

공용체 변수 - 각각 할당(X), 크기가 가장 큰 멤버의 변수 타입만 하나 할당되어 이를 공유

공용체의 멤버에 값을 한 번 대입하고, 두 번 대입하면 두 번째 값이 모든 값을 덮어씀


typedef union

{

int n1;

int n2;

double n3;

};

위의 코드처럼 선언하면 밑에 그림처럼 생성이 된다.


'언어 > C' 카테고리의 다른 글

파일 입출력 -1  (0) 2016.03.10
구조체 기초 (열거형 enum)  (0) 2016.03.10
escape sequence  (0) 2016.02.26
counting program  (0) 2016.02.18
Symbolic Constants  (0) 2016.02.16
Posted by 知彼知己百戰不殆
,

escape sequence

언어/C 2016. 2. 26. 10:59



'언어 > C' 카테고리의 다른 글

구조체 기초 (열거형 enum)  (0) 2016.03.10
구조체 기초 (union, struct의 차이)  (0) 2016.03.07
counting program  (0) 2016.02.18
Symbolic Constants  (0) 2016.02.16
구조체(structure) - 중급  (0) 2016.01.09
Posted by 知彼知己百戰不殆
,