strukturen übergeben
-
Also ich habe eine struktur in der main stehen und möchte diese an ein Unterprogramm übergeben.
Nur irgendwie klappt das nich so ganzvoid save_ds(struct *data) //Unterprogramm { } int main() { struct datensaetze { char rzahl[5]; //roemische Zahl int szahl; //arabische Zahl }; struct datensaetze dsatz[] = { "CXVI", 116, "MIII", 1003, "XXVI", 26 }; save_ds(&dsatz); // Aufruf Unterprogramm }
Die struktur soll auf jednefall in der main deklariert werden, nur irgendwie haut er mir so fehlermeldungen um die Ohren:
"error C2664: 'save_ds' : Konvertierung des Parameters 1 von 'struct main::datensaetze (*)[3]' in 'struct $S1 *' nicht moeglich"
-
struct datensaetze { char rzahl[5]; //roemische Zahl int szahl; //arabische Zahl };
hat nix in der main Funktion zu suchen.
-
also muß man es wirklich immer vor der eigentlichen funktion deklarieren?
Ich dachte es müsste in die main weil ich für das programm keine globalen variablen verwenden darf.
Zählt das nicht als globale variablel?
-
die strukturen werden prinzipiell vor den funktionsdefinition geschrieben. das bedeutet nicht gleich, dass es eine globale variable ist. erst wenn du speicherplatz für die struktur reservierst, was dann innerhalb einer funktion passiert, dann hast du eine "variable" vom typen deiner struktur:
typedef struct foo { char bla[32]; int ka; }bar; int funktion( bar* ptr_auf_struktur ) { // struct verwenden } int main() { bar* dein_struct = ( *bar )malloc( sizeof( *bar ) ); funktion( &dein_struct ); }
-
hando schrieb:
bar* dein_struct = ( *bar )malloc( sizeof( *bar ) ); }
nana, wer wird den hier casten wollen?
bar* dein_struct = malloc(sizeof(bar));
-
Eure & beim Funktionsaufruf sind beide falsch.
-
Tim schrieb:
Eure & beim Funktionsaufruf sind beide falsch.
bei Dragonslayer stimmts aber (nur alles davor ist verkehrt)...
-
Nein tut es nicht.
-
Tim schrieb:
Nein tut es nicht.
ok, hast mich überzeugt
-
tut in der tat nicht hab ich grad beim compilen gemerkt, der cast operator beim aufruf der funktion muß weg...
-
So und nu machen wirs mal komplett schön und richtig
struct foo { char bla[32]; int ka; }; int funktion (struct foo * ); int main () { struct foo a; struct foo *p = &a; funktion(p); return 0; } int funktion(struct foo *zz) { // hier mach was damit }
-
Wozu du da noch eine Extra Pointer-Variable anlegst, ist aber fragwürdig. Da reicht
int main () { struct foo a; funktion(&p); return 0; }
völlig aus
-
codefrag schrieb:
So und nu machen wirs mal komplett schön und richtig
ein compileversuch würde schon an der ersten zeile scheitern
-
Also ich finde das
codefrag schrieb:
struct foo ( char bla[32]; int ka; );
eigentlich fragwürdiger
edit: und wieder mal zu lahm
-
Ich weiss gar nicht was ihr habt - da stehen doch die "{}"
@ CStoll: Joa
aber um es zu verdeutlichen habe ich nochmals nen Pointer angelegt..
Aber ich seh schon... ihr Freaks :p
-
codefrag schrieb:
Aber ich seh schon... ihr Freaks :p
pah, lern programmieren