C배열 안에 다양한 타입을 저장하려면 어떻게 하나요?
조회수 2568회
파이썬에서는
mylist = ["hello", 3, {3:5, 2:4}]
print(mylist)
이런 식으로 리스트 하나에 여러 가지 타입을 담을 수 있었는데 C에서는 이렇게 쓸 수 있는 방법이 있을까요?
1 답변
-
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: // 에러처리! }
댓글 입력