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


파이썬에서는

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

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

  • 2016년 02월 01일에 작성됨

조회수 278


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:
    // 에러처리!
}
  • 2016년 02월 01일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close