[英]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.