union
-
Geht das?
union Value { bool b; float f; double d; int i; char* ch; }oder:
union Value { bool b; float f; double d; int i; char[] ch; }
-
das untere sieht komisch aus, das obere geht bestimmt.
-
Das geht. Beim unteren müsstest Du die Anzahl Arrayelemente eintragen
-
Richtig wäre es so...
union Value { bool b; float f; double d; int i; char ch[256]; };Es wird nicht char[] geschrieben, sondern char name[]. Dann noch die Speichermenge angeben und wichtig, ein ; Semikolon am Ende der Union hinter der } Klammer.
-
Ok.
Wieviel Speicher belegt denn ein char*?
Mich wundert es, das ersteres auch geht, da ich doch hier quasi ein dynamisches char array habe...
-
sizeof(char*)
-
char* belegt genau sizeof(char*) Byte, also so viel Platz wie ein Zeiger auf deinem System benötigt.
-
s1egfr1ed schrieb:
Ok.
Wieviel Speicher belegt denn ein char*?
Mich wundert es, das ersteres auch geht, da ich doch hier quasi ein dynamisches char array habe...Und was soll daran schlimm sein?...
-
s1egfr1ed schrieb:
Ok.
Wieviel Speicher belegt denn ein char*?
Mich wundert es, das ersteres auch geht, da ich doch hier quasi ein dynamisches char array habe...Nein du hast nur einen Pointer, nichts dynamisches.
-
Dynamisch wäre, wenn du mit new und delete arbeiten würden, denn mit diesen Schlüsselwörter arbeitest du mit der dynamischer Speicherverwaltung.
-
FreakY<3Cpp schrieb:
Dynamisch wäre, wenn du mit new und delete arbeiten würden, denn mit diesen Schlüsselwörter arbeitest du mit der dynamischer Speicherverwaltung.
Auch das wäre nicht weiter relevant, weil dynamisch allokierter Speicher nicht zum struct dazugehört.
-
Und selbst dann wäre es nur begrenzt relevant, da
unionin C++ nahezu keine praktische Bedeutung hat.Alleine dass man nicht mit Klassen arbeiten kann, schränkt die Anwendung ziemlich ein. Dann sind
unionsetwas gefährlich, wenn man nicht aufpasst. Meistens hat man auch nicht einfach Variablen, die gleichzeitig mehrere Typen annehmen können, oder kommt mit gängigen Methoden wie Polymorphie schon recht weit. Für die anderen Fälle gibt es immer noch typsichere Varianten wie Boost.Variant.