Ich sah von Code in einem Legacy-Projekt folgendes Stück.extern-Deklaration, T * v/s T []
/* token.c */
struct token id_tokens[MAX_TOKENS];
/* analyse.c (v1) */
extern struct token *id_tokens; /* Raised my eyebrow, id_token declares a pointer */
Ich bestand darauf analyse.c
auf die Veränderung der Erklärung, wie unten zu enthalten:
/* analyse.c (v2) */
extern struct token id_tokens[]; /* I am happy with this. id_tokens declares array of unspecified size. */
Ich möchte v2
weil pointer to T
nicht gleich wie array of T
ist. Der Zähler meines Freundes argumentierte, dass das Verhalten von beiden gleich ist, also ist es egal, ob ich v1 und v2 verwende.
Frage 1: Hat Array von unvollständigen Typ in einen Zeiger führen?
Frage 2: Ist mein Freund richtig, dass beide Versionen verhaltensgemäß garantiert gleichwertig sind?
Siehe [dies] (http://c-faq.com/aryptr/aryptr1.html) ** Array sind keine Zeiger ** Viele Duplikate, idk was ist Verwirrung, in gewisser Weise, Sie und Ihr Freund sind beide falsch – P0W
Arrays und Zeiger können synonym verwendet werden, da ein Array nur eine Gruppe von Variablen desselben Typs in einer Zeile im Speicher darstellt und ein Zeiger einfach auf das erste Element einer Gruppe von Variablen desselben Typs in einer Zeile zeigt in Erinnerung. Deshalb ist 'char * foo' das gleiche wie' char foo [] ' – Gophyr
@Gophyr Du redest die Sprache meines Freundes. Überprüfen Sie die Antworten unten. Sie sind tatsächlich anders. –