Ich bin etwas neu zu C, ich lerne es bei uni, und ich denke, ich könnte etwas über Typedefs missverstehen. Hier ist mein Code:Die Adresse der Struktur kann nicht einer Variablen zugewiesen werden, deren Typ ein typedef Zeiger auf diese Struktur ist
struct stackNode
{
char data;
struct stackNode *nextPtr;
};
typedef struct stackNode StackNode;
typedef struct StackNode *StackNodePtr;
int main()
{
StackNode stack;
StackNodePtr stackPtr = &stack;
}
Das gibt mir diese Warnung:
warning: initialization from incompatible pointer type [enabled by default]
StackNodePtr stackPtr = &stack;
^
Allerdings, wenn ich diese Zeile mit diesem ersetzen:
StackNode *stackPtr = &stack;
Es funktioniert gut.
Leider sehe ich hier nicht den wirklichen Unterschied. Ist nicht typedef struct StackNode *StackNodePtr;
nur eine Art "Wrapper-Typ" für einen Zeiger auf die Stack-Struktur? Ich habe ein gutes Gespür für Zeiger und Strukturen, aber ich weiß nicht, was hier vor sich geht. Ich bin mir sicher, ich vermisse nur etwas Kleines.
Übrigens kompiliere ich im c89-Modus mit gcc.
Beginnen Sie mit dem Entfernen der 'typedef'-Zeiger. Sie sind nur schädlich, indem sie Ihren Code verschleiern, die Semantik verbergen und schließlich zu Verwirrung führen - QED. – Olaf
Und 'typedef's sind eigentlich Aliase. C wird nicht mit dem Namen, sondern mit dem kompatiblen/"echten" Typ eingegeben. – Olaf
'typedef struct StackNode' Tippfehler als' typedef struct stackNode' (S und s) – BLUEPIXY