이것이 가능한지 궁금하지만 일반 포인터 (또는 다른 일반적인 구조체)를 구현하기 위해 void 포인터를 사용할 수 있습니까? 예를 들어, 코드 아래 코드를 시도하고 있습니다. 푸시와 팝용 함수는 컴파일되지만, main에서 처리하는 방법을 이해하지 못합니다.void 포인터를 사용하여 제네릭 스택을 구현 하시겠습니까?
이것이 가능한지 궁금합니다. 구조체 정의 에서처럼 void 포인터를 만들면 데이터를위한 실제 저장소를 할당하지 않습니다. 예를 들어, 푸시 루틴에서 :
elem-> data = data; // 이것은 새로운 저장 공간을 만들지 않고 기존 변수를 가리키는 데이터입니다
C에서 이와 같은 작업을 수행하는 유일한 방법은 void 포인터를 전달하고 각 데이터 유형을 개별적으로 처리하는 if 문을 사용하는 것입니다. (데이터 유형은 입력으로 전달되어야 함)? 그게 맞습니까?
typedef struct Element {
struct Element *next;
void *data;
} element;
typedef element * element_ptr;
typedef void * void_ptr;
typedef int * int_ptr;
void pop (element_ptr *stack, void_ptr *data)
{
element *elem;
elem = *stack;
*data = elem->data;
*stack = elem->next;
free(elem);
}
void push (element_ptr *stack, void *data)
{
element *elem;
elem = (element *) malloc(sizeof(element));
elem->data = data;
elem->next = *stack;
*stack = elem;
}
main()
{
element *stack;
void *data;
int num, num2;
int_ptr num_ptr;
num_ptr = &num2;
num = 5;
push(&stack,&num);
pop(&stack,&num_ptr); //This line gives a warning
printf("Popped %d from stack\n",num2); //Does not work.
}