Ich versuche, jemandes Code zu entschlüsseln, und ich sehe etwas, das ich nicht verstehe. Ich sehe keine Referenzen darüber, wie Strukturen angewendet werden, wenn Mitglieder nicht in der Kopfzeile oder am Anfang des Codes definiert sind, sondern später definiert werden. Hier ist ein Beispiel für das, was ich herausfinden möchte. Ich habe diese Data_t * Daten notiert; in der Kopfzeile ist nicht definiert, bis wir die Funky-Funktion eingeben und mein Compiler Fehler in dieser Zeile ausgibt. Ich denke, meine Frage wäre - ist dies ein gültiger Weg, Daten in Strukturen einzugeben?Strukturen initialisieren, ohne Elemente der Struktur zu definieren - C
Vielen Dank!
#include <stdio.h>
typedef struct config{
int a;
int b;
int c;
Data_t *data;
} config_t;
int funky(config_t *config);
int main(void)
{
printf("In main()\n");
config_t config;
funky(&config);
printf("a = %d\n", config.a); //accessing config's a member
return 0;
}
int funky(config_t *config)
{
printf("In funky()\n");
Data_t *dataa = config->data;
for(i=0;i<5;i++){
dataa[i].mem1=i;
dataa[i].mem2=4+i;
}
//Set values
config->a = 1;
printf("a = %d\n", config->a); //pointer to config's a member
return 0;
}
Hallo Carl, Danke für die schnelle Antwort. Also, wenn ich das Datenfeld in der Konfigurationsstruktur in main initialisiere, sollte es in Ordnung sein, oder? Der Code, den ich als Referenz betrachte, sagt, dass sie in ihrem main() - Code etwas wie config.data = calloc (NUM, sizeof (Data_t)) gemacht haben; Ich verstehe nicht, wie der Compiler wissen würde, wie groß Data_t ist, wenn er nicht wirklich definiert ist. (?? O_O ??) Danke .. –
Das sollte dich reparieren, ja. Es wird nicht den Compiler-Fehler beheben, da "Data_t" nicht definiert ist, aber vorausgesetzt, dass Sie dies geklärt haben, ist es auch wichtig, diesen Zeiger zu initialisieren. –
Wie würden Sie Data_t definieren? Die Art, wie ich es sehe, wenn Sie Data_t definieren, d. H. Typedef struct dataS {int mem1; int mem2; } Data_t in der Kopfzeile oder in main, dann müssen Sie nicht Data_t * dataa = config-> data; in der funky Funktion. Was auf eine der früheren Fragen zurückgeht - ist es möglich, Mitglieder der Struktur in Funktionen zu definieren, wenn sie ein Mitglied bilden muss? –