C배열 안에 다양한 타입을 저장하려면 어떻게 하나요?

파이썬에서는

mylist = ["hello", 3, {3:5, 2:4}]
print(mylist)

이런 식으로 리스트 하나에 여러 가지 타입을 담을 수 있었는데 C에서는 이렇게 쓸 수 있는 방법이 있을까요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    tagged union

    배열 원소 하나하나를 union으로 만들면 가능합니다.

    struct {
        enum { is_int, is_float, is_char } type;
        union {
            int ival;
            float fval;
            char cval;
        } val;
    } my_array[10];
    

    enum type은 어떤 타입을 썼는지 플래그를 띄워주는 역할을 쓰고, union val은 값을 저장하는 용도로 씁니다.

    원소를 저장하는 예를 들면

    my_array[0].type = is_int; //0번째 원소는 int
    my_array[0].val.ival = 3; //int값을 저장
    

    array에 저장된 값을 쓸 때는 switch문으로 type을 먼저 확인해 준 뒤에 써야 합니다.

    switch (my_array[n].type) {
    case is_int:
        // my_array[n].ival
        break;
    case is_float:
        // my_array[n].fval
        break;
    case is_char:
        // my_array[n].cvar
        break;
    default:
        // 에러처리!
    }
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.