Frage zu typedef bei Strukturen
-
SeppJ schrieb:
typedef struct { int sv_nummer; char vorname[20], name[20]; char telnr[15]; int alter; } Person; // Person ist nun ein anderer Name für dieses struct int main(void) { Person max, moritz; // Zwei Variablen vom Typ Person max.alter = 25; moritz.alter = max.alter + 2; return 0; }
Ist der Vorteil nun klar?
Bin ich im falschen Film?? Oder ich habe keine Ahnung von C...
Ist die Referenz auf ein Feld in einer typedef struct Definition nicht
-> also: max->alter
-
confused... schrieb:
Ist die Referenz auf ein Feld in einer typedef struct Definition nicht
-> also: max->alter
1. In C gibt es keine Referenzen, sondern Zeiger.
2. max ist kein Zeiger, sondern eine direkte Instanz der struct. Dann braucht man den . Operator.
-
icarus2 schrieb:
confused... schrieb:
Ist die Referenz auf ein Feld in einer typedef struct Definition nicht
-> also: max->alter
1. In C gibt es keine Referenzen, sondern Zeiger.
2. max ist kein Zeiger, sondern eine direkte Instanz der struct. Dann braucht man den . Operator.ok, und wann benutzt man dann
->
-
confused... schrieb:
ok, und wann benutzt man dann
->
Wenn man einen Pointer hat.
Hier ein Beispiel:
int main() { Point p1; // Eine Variable vom Typ Point Point* p2 = malloc(sizeof(*p2)); // p2 ist ein Zeiger, der auf eine Variable vom Typ Point zeigt p1.x = 3; p1.y = 7; p2->x = 3; p2->y = 7; }
-
icarus2 schrieb:
confused... schrieb:
ok, und wann benutzt man dann
->
Wenn man einen Pointer hat.
Hier ein Beispiel:
int main() { Point p1; // Eine Variable vom Typ Point Point* p2 = malloc(sizeof(*p2)); // p2 ist ein Zeiger, der auf eine Variable vom Typ Point zeigt p1.x = 3; p1.y = 7; p2->x = 3; p2->y = 7; }
Korrekt, wobei den malloc braucht man nicht unbedingt....
Andererseits wirst Du fast immer die "*" (also Pointer) Variante bei typedef structs finden....
Ich wünsche allen hier ein schönes Osterfest....
-
confused... schrieb:
Andererseits wirst Du fast immer die "*" (also Pointer) Variante bei typedef structs finden....
Das zweifle ich mal ganz stark an.
-
#include <stdio.h> #include<stdlib.h> typedef struct _gugu { int blabla; } gugu; void print_hugo1 (gugu hugo1) { printf("%d\n" , hugo1.blabla); return; } void print_hugo2 (gugu *hugo2) { printf("%d\n" , hugo2->blabla); return; } int main() { gugu hugo1; gugu *hugo2 = malloc(sizeof(*hugo2)); hugo1.blabla = 100; print_hugo1(hugo1); hugo2->blabla = 200; print_hugo2(hugo2); return 0; }
Das C ist schon ne lustige Sprache....
-
confused... schrieb:
[...]
Das C ist schon ne lustige Sprache....Wieso?
-
confused... schrieb:
#include <stdio.h> #include<stdlib.h> typedef struct _gugu { int blabla; } gugu; void print_hugo1 (gugu hugo1) { printf("%d\n" , hugo1.blabla); return; } void print_hugo2 (gugu *hugo2) { printf("%d\n" , hugo2->blabla); return; } int main() { gugu hugo1; gugu *hugo2 = malloc(sizeof(*hugo2)); hugo1.blabla = 100; print_hugo1(hugo1); hugo2->blabla = 200; print_hugo2(hugo2); return 0; }
Das C ist schon ne lustige Sprache....
Wo ist die Prüfung, ob malloc() fehlschlägt ?! Wo ist das free() ?!
-
hugo2 schrieb:
Wo ist die Prüfung, ob malloc() fehlschlägt ?! Wo ist das free() ?!
Das ist doch alles überbewertet.
malloc() geht ja in den meisten Fällen gut und free()... Naja, der Speicher wird immer größer und billiger.