Verständnisproblem bei einfachem struct ...
-
Hi,
ich bin in der Lernphase, übe z.Z. mit structs und habe folgendes Problem:
Im folgenden Code, ..
struct Bruch { int z; //int z2; unsigned int n; unsigned int n2; int gn; unsigned int gz; }test; void bruch_scan() { printf("\nZaehler: "); scanf("%d", &test.z); printf("\nNenner: "); scanf("%u", &test.n); } void bruch_printf(struct Bruch *zae, struct Bruch *nen) { printf("\n%d\n--\n%u\n", *zae, *nen); } int main(void) { bruch_scan(); bruch_printf(&test.z, &test.n); getchar(); return 0; }
gibt mir die Funktion 'bruch_print' die Werte der beiden Adressen wieder.
Wenn ich aber die Variable 'int z2' im struct wieder auskommentiere, wird als wert von &test.n nur 0 ausgegeben.Warum ?
grüsse
-
Jammert da nicht der Compiler?
23 main.c [Warning] passing arg 1 of `bruch_printf' from incompatible pointer type
Denk mal drüber nach, warum!
-
hans_struct schrieb:
void bruch_printf(struct Bruch *zae, struct Bruch *nen) { printf("\n%d\n--\n%u\n", *zae, *nen); } int main(void) { bruch_scan(); bruch_printf(&test.z, &test.n); getchar(); return 0; }
gibt mir die Funktion 'bruch_print' die Werte der beiden Adressen wieder.
Wenn ich aber die Variable 'int z2' im struct wieder auskommentiere, wird als wert von &test.n nur 0 ausgegeben.Warum ?
Du hast da einen kleinen Denkfehler drin: beim Aufruf von bruch_printf() übergibst du inkompatible Pointer (du übergibst einen Zeiger auf einen int und die Funktion erwartet einen Zeiger auf ein "struct Bruch").
Du solltest die Signatur von bruch_printf so ändern, dass du einfach nur 2 Integer Werte übergibst (wäre zumindest in diesem Kontext am sinnvollsten).}-Tux-{
-
Oh, also die beiden Parameter spiegeln also das komplette Struct wieder ?
Ich glaube, dann weiss ich, wo der Fehler liegt. Normale int-pointer tun's ja auch...
-
}-Tux-{ schrieb:
Du solltest die Signatur von bruch_printf so ändern, dass du einfach nur 2 Integer Werte übergibst (wäre zumindest in diesem Kontext am sinnvollsten).
unfug, über gibt einen struct-* und bei 'bruch_scan' ebenso.
-
Soviel also zu "kompiliert, alles wird gut". Entweder auf die Warnungen hören oder den Compiler strenger machen!
Problem gelöst?
-
Ja, alles prima.
Danke für die Antworten euch allen.Also Warunung ignoriere ich meist, da ich schon froh bin wenn ich keine error-ausgabe bekomme.
grüsse