如何在 C 中打印 (void **) 数据?

How can I print a (void **) data in C?

我很难完全理解和学习指针、转换等所有行为。

我有以下结构,基本上是一个 stack data structure:

struct stack
{
    void **items;
    size_t top;      
    size_t max_size;
};

我希望能够 return top element,所以这是我的 Peek 函数:

void *Peek(const stack_ty *stack)
{
    return(stack->items[stack->top]);
}

这是我在 main.c 中的测试打印:

stack_ty *new_stack = CreateStack(5);
 
Push(new_stack, (void *)1);
Push(new_stack, (void *)2);
Push(new_stack, (void *)3);
 
printf("The top element is %d\n", *(int *)Peek(new_stack));

我在进入 Peek 函数后立即得到一个 Segmentation fault (core dumped)

我猜这与我对 Peek() 的 return 值所做的 *(int *) 转换有关,但我想不出任何其他方法来 [=21] =] 或显示由 void * 传递的任何值。我的意思是,我必须将其转换为 int *char * 或其他任何格式,对吧?

我在这里做错了什么?我很高兴听到有关如何更好地理解整个 pointers 事情的任何提示。我的意思是,我认为我很擅长,但我想我错了。

说实话,一开始我觉得我需要把1,2 and 3转成(void *)&1(void *)&2(void *)&3,因为我觉得我过不了他们就像那样,我认为如果我想将 int 转换为 void * 我必须给它 addressint.

但是编译器骂我,所以我改成了Push(new_stack, (void *)3);

因为你在推送时将 int 转换为 void *,所以你需要在查看时将其转换回 int,而不是 [=14] =].您没有在堆栈中存储指向整数的指针,而是将整数本身视为指针。

printf("The top element is %d\n", (int)Peek(new_stack));