in struct variable initialisieren
-
also muss ich jedesmal wenn was initialisiert wird int zahl = 0 setzen...ok danke
-
jay186 schrieb:
also muss ich jedesmal wenn was initialisiert wird int zahl = 0 setzen...ok danke
ja, wie immer beim initialisieren.
du könntest natürlich auch sowas machen:// liefert ein vorinitialisiertes beispiel-objekt struct Beispiel CreateBeispiel (void) { struct Beispiel b; b.Zahl = 0; return b; } ... struct Beispiel b; b = CreateBeispiel(); ...
ist zwar keine initalisierung im eigentlichen sinne, aber vielleicht hilft dir das.
-
@undertaker: Das ist super! Genau so brauch ich das! Danke
noch ne kurze Frage: wie kann ich mir die größte unsigned int Zahl unabhängig vom System anzeigen lasse?
MAX_"irgendwas" hab ich irgendwie in erinnerung finde es aber nicht mehr---
-
UINT_MAX
du musst dazu nur die <limits.h> #includen
-
ah, habs gefunden es ist:
#include limits.h
INT_MAX oder UINT_MAX
Bei
printf("%d",UINT_MAX)
wird -1 angezeigt, weiß jemand wieso? und
gehört limits.h zur Standardbibliothek?
-
jay186 schrieb:
Bei
printf("%d",UINT_MAX)
wird -1 angezeigt, weiß jemand wieso?
weil, wegen des %d, printf den wert als 'signed' interpretiert.
probier mal %ujay186 schrieb:
und
gehört limits.h zur Standardbibliothek?ja, die sollte bei jeder standardkonformen C toolchain dabei sein.
-
danke!
-
gibts in C keinen Konstruktor für Structs???
naja nehme an, das dies erst durch die c++ OO hinzukam..
-
BorisDieKlinge schrieb:
gibts in C keinen Konstruktor für Structs???
Doch. Man muss ihn halt schreiben. fopen() ist z.B. der Konstruktor für ein Objekt FILE.
-
jay186 schrieb:
@undertaker: Das ist super! Genau so brauch ich das! Danke
bei grösseren structs würde ich das aber nicht mehr so machen, weil dann 'ne menge bytes durch die gegend kopiert werden. besser so etwa:
// so... void InitBeispiel (struct Beispiel *b) { b->Zahl = 0; } // ...oder so #define INIT_BEISPIEL(b) (b).Zahl=0
-
@Tim: aber das ist ja nur ein pseudo konstruktor...
-
BorisDieKlinge schrieb:
@Tim: aber das ist ja nur ein pseudo konstruktor...
Was macht einen nicht-pseudo-Konstruktor deiner Meinung nach aus?
-
er wird automatisch beim erzeugen eines obejktes aufgerufen.,..
-
BorisDieKlinge schrieb:
er wird automatisch beim erzeugen eines obejktes aufgerufen.,..
Das automatisch ist die Definition die man in C++ hat. In C gibt es nichts automatisches. Warum soll es aber nicht ein echter CTor sein, nur weil man selber etwas machen muss?
C ist nicht C++, deshalb kann man nicht die Definitionen so einfach mischen. fopen ist der Konstruktor für FILE* Objekte. Ein Objekt ist erst dann ein echtes Objekt wenn der Konstruktor ausgeführt wurde - ob der nun automatisch ausgeführt wird oder nicht, sollte keine Rolle bei der Definition spielen. Es ist natürlich praktischer wenn er automatisch ausgeführt wird, keine Frage - aber viele Sprachen verlangen einen expliziten CTor aufruf (in Eiffel muss man zB explicit "object.make" aufrufen, in Java muss man =new Class() schreiben,...)
-
BorisDieKlinge schrieb:
er wird automatisch beim erzeugen eines obejktes aufgerufen.,..
oder - er existiert, auch wenn er nicht benötigt wird
Shade Of Mine schrieb:
Ein Objekt ist erst dann ein echtes Objekt wenn der Konstruktor ausgeführt wurde -
was ist der unterschied zwischen einem objekt und einem echten objekt?
-
Undertaker schrieb:
Shade Of Mine schrieb:
Ein Objekt ist erst dann ein echtes Objekt wenn der Konstruktor ausgeführt wurde -
was ist der unterschied zwischen einem objekt und einem echten objekt?
Mit einem echten Objekt kann man arbeiten, ohne daß das Programm zusammenbricht. (will heißen, nicht-initialisierte Variablen in C sind nur bedingt einsetzbar - und damit noch keine "echten" Objekte)
-
CStoll schrieb:
Undertaker schrieb:
Shade Of Mine schrieb:
Ein Objekt ist erst dann ein echtes Objekt wenn der Konstruktor ausgeführt wurde -
was ist der unterschied zwischen einem objekt und einem echten objekt?
Mit einem echten Objekt kann man arbeiten, ohne daß das Programm zusammenbricht. (will heißen, nicht-initialisierte Variablen in C sind nur bedingt einsetzbar ...
ja, stimmt, aber trotzdem würde ich einem uninitialisierten objekt nicht die eigenschaft des 'objekt-seins' absprechen wollen.
-
Undertaker schrieb:
ja, stimmt, aber trotzdem würde ich einem uninitialisierten objekt nicht die eigenschaft des 'objekt-seins' absprechen wollen.
[bitte überlesen]
und wieso nicht? Vielleicht sind das im eigentlichen Sinne keine C++ Objekte, aber C Objekte. Ich finde also die Objekt Bezeichnung für rechtfertigt.
[/biite überlesen]edit: sorry Undertaker, hab was verwechselt, da bin ich deiner Meinung.