【发布时间】:2011-03-28 23:12:16
【问题描述】:
我想知道这是否可能,但是您可以使用 void 指针来实现通用堆栈(或任何其他通用结构)。例如,我正在尝试代码下面的代码。 push 和 pop 的函数可以编译,但我不明白如何在 main 中处理它们。
我想知道这是否可能?当您像我在结构定义中那样创建一个 void 指针时,它不会为数据分配任何实际存储空间吗?例如,在推送例程中:
elem->数据=数据; //这不是创建任何新的存储,数据指向现有变量
在我看来,在 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.
}
【问题讨论】: