如何解决如何在 C 中打印 (void **) 数据?
我很难完全理解和学习指针、强制转换等的行为。
我有以下结构,它基本上是一个 stack data structure
:
struct stack
{
void **items;
size_t top;
size_t max_size;
};
我希望能够返回 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));
我在它进入 Segmentation fault (core dumped)
函数后立即得到一个 Peek
。
我猜这与我对 *(int *)
的返回值所做的 Peek()
转换有关,但我想不出任何其他方式来 print()
或显示任何值由 void *
传递。我的意思是,我必须将其转换为 int *
或 char *
或其他任何内容,对吗?
我在这里做错了什么?我很高兴听到有关如何更好地理解这整个 pointers
事情的任何提示。我的意思是,我认为我很擅长它,但我想我错了。
老实说,一开始我认为我需要将 1,2 and 3
转换为 (void *)&1
、(void *)&2
、(void *)&3
,因为我认为我无法通过它们像那样,我想如果我想将 int
转换为 void *
,我必须给它 address
的 int
。
但是编译器对我尖叫,所以我把它改成了Push(new_stack,(void *)3);
解决方法
由于您在推送时将 int
转换为 void *
,因此您需要在查看时将其转换回 int
,而不是 int *
.您不是在堆栈中存储指向整数的指针,而是将整数本身视为指针。
printf("The top element is %d\n",(int)Peek(new_stack));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。