簡體   English   中英

如何在 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;
};

我希望能夠返回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 *我必須給它intaddress

但是編譯器對我大喊大叫,所以我把它改成了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM