C:TIL-스택에 여러 데이터 타입을 동시에 저장해야 할 때2

Nayeon Kim·2021년 9월 27일
2

c language

목록 보기
7/9

스택에 int, string 타입 2가지를 넣어줘야 할 때, 이전에 문자열 배열을 이용해서 해결했었는데 int형이 문자로 변환되어 들어간다는 점이 아쉬웠다.

이 문제점을 해결하는 방법은 쉬웠다.
가장 원초적으로 돌아가, 구조체의 개념을 다시 떠올려보자.
구조체는 한 데이터 타입만 저장 가능한 배열의 단점을 해결해줄 수 있다. 여러 데이터 타입을 저장할 수 있으니.
int, string 타입 변수를 원소로 가지는 구조체(element)를 만들고, 스택의 데이터 타입을 구조체로 선언하는 것.

typedef struct {
	int num;
	char numString[MAX_STRING];
} element;

typedef struct {
	element stack[MAX_STACK_SIZE];
	int top;
} StackType;

만약에
StackType* s 구조체 포인터가 있고,
s->stack[0](=구조체 변수)에 num = 10, numString = "ten"이 저장되어 있을 때,
이 element 구조체의 원소값들을 호출하는 방법은

s->stack[s->top]->num, s->stack[s->top]->numString이 아니라
s->stack[s->top].num, s->stack[s->top].numString이 되어야 함.
stack 배열 자체는 포인터 형식이 아니니까 당연한 거지만 실수하기 쉬운 부분.

profile
Department of Computer Science

0개의 댓글