假設我有以下結構是否有可能只用指針結構(無數據類型)來實現堆棧?
typedef struct _Stack {
struct _Stack *next;
} Stack;
注意,在以上提供了一種用於存儲任何數據類型,僅*next
指針結構。所以,我的問題是有可能以下功能是有效的。
void stackPush(Stack **stackP, void *dataP) {
Stack *data = (Stack*)dataP;
data->next = *stackP;
*stackP = data;
}
我的文件gtrashstack.c
中看到glib
庫中此功能。但是當我在上面編譯時,我收到了一條警告:In data->next : assignment from incompatible pointer type
。
我知道,我可以用通用指針重寫結構。但我只想知道,爲什麼上述不起作用?
更新:我的錯誤,在這裏我寫typedef struct _Stack
但在我的程序中,我錯過了_Stack
。
你的問題是基於一個錯誤的前提。這是有效的,它會起作用。雖然'data-> next = * stackP'應該寫成'data-> next =&(stackP-> next);'或'data-> next =(struct _Stack *)* stackP;'。 –
爲什麼不''data-> next =(Stack *)* stackP' –
因爲'data-> next'的類型是'struct _Stack *',而不是'Stack *'。 –