[英]How can I print a (void **) data in C?
我很难完全理解和学习指针、强制转换等的行为。
我有以下结构,它基本上是一个stack data structure
:
struct stack
{
void **items;
size_t top;
size_t max_size;
};
我希望能够返回top element
,所以这是我的Peek
function:
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
function 后立即遇到Segmentation fault (core dumped)
。
我可以猜测它与我对Peek()
的返回值所做的*(int *)
强制转换有关,但我想不出任何其他方式来print()
或显示任何由void *
传递的值。 我的意思是,我必须将它转换为int *
或char *
或其他什么,对吧?
我在这里做错了什么? 我很高兴听到有关如何更好地理解整个pointers
的任何提示。 我的意思是,我以为我很擅长,但我想我错了。
老实说,一开始我认为我需要将1,2 and 3
转换为(void *)&1
、 (void *)&2
、 (void *)&3
,因为我认为我不能像那样通过它们,我想如果我想将int
转换为void *
我必须给它int
的address
。
但是编译器对我大喊大叫,所以我把它改成了Push(new_stack, (void *)3);
由于您在推动时将int
转换为void *
,因此您需要在查看时将其转换回int
,而不是int *
。 您没有在堆栈中存储指向 integer 的指针,而是将 integer 本身视为指针。
printf("The top element is %d\n", (int)Peek(new_stack));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.