Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++

union-Strukturen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Wie union-Strukturen aufgebaut werden und wo die Gefahren deren Einsatzes liegen, zeigt der Trainer in diesem Video. Erfahren Sie auch Tipps des Trainers zu diesem Schlüsselwort.

Transkript

Ich möchte Ihnen jetzt zeigen, wie union-Strukturen aufgebaut sind. Die normale Struktanweisung liegt Variable nacheinander im Speicher ab. Also, wenn ich dann int (Integer) speichere und dann einen float und char (Charakter), dann addiert sich der Speicherplatz auf, sozusagen für die einzelnen. Ich kann noch unabhängig von einander ansprechen. und dort gleichzeitig Daten unterbringen. Das ist ander bei union. Ein union ist eigentlich ein bisschen Spezialfall, den man nicht so häufig jetzt bei der Programmierung braucht. Ja, bei den Kompatibilitätsgeschichten, zum Beispiel Daten speichern auf Datenträgern und wieder zürückladen in Abhängigkeit von anderen Parametern, dann kann es nämlich sein, dass man die Daten unterschiedlich interpretieren muss, mal es ist in float, mal in long, mal in char, und trotzdem werden an der gleichen Stelle gespeichert. Und so kann ich einen union definieren. Durch den Schlüsselbegriff union, einen frei gewählten Namen, my_union habe ich das mal genannt in geschweiften Klammern, kommt die Parameterdefinition, Parameter ist es ja eigentlich nicht oder die Definition der Anordnung. Also, float d1 ist damit der erste Wert, ein float mit dem Namen d1, dann ein long mit l1 ein char und ein double. Was kann ich jetzt machen? Damit kann ich natürlich hier erst mal eine Variable u1 definieren, die von Type my_union ist. Da schreibe ich hier einfach den freigewählten Namen hin. Und jetzt kann ich ganz normal zuweisen, u1.d1 ist zum Beispiel 1,0, dann gebe ich das ganze hier mal aus. u1.l1 = 123, gebe ich es aus, einen char gebe ich aus. Na, ja, bis dahin ist eigentlich das ganz normal. Ich mache da mal eine kleine Kommentar-Trennung dazwischen. Das sieht jetzt gleich ganz anders aus Ich habe jetzt hier das ch da zugewiesen und will dann anschließend l1 ausgeben. Da schauen wir uns gleich mal, was da passiert. Und hier gebe ich einen double aus, und da schauen wir uns, was da passiert. Es ist nämlich eigentlich so, dass bis zu dem Zeitpunkt war eindeutig, wenn ich das zuweise, kann ich es wieder auslesen. Das ist völlig ok. Hier ist es im Prinzip undefiniert. Ich interpretiere nämlich dann den char, der dadrin steht, zusammen mit dem, was vorher schon dadrin stand. Speicherzellen belegen hier aufeinander legende Werte im Allgemeinen, und gibt es einfach so aus, ob es ein long sei Jetzt schauen wir uns doch mal an, was jetzt passiert. Es wird in den anderen Compilern und Umständen anders aussehen. Die oberen Zahlen sind immer eindeutig, da kriege ich auch wirklich den Wert. Hier unten, das ist schon eine Glücksache. 65 ist nämlich zufällig der Maskenwert von A Da habe ich Glück gehabt, dass der long-Wert oben mit dem Wert 0 behaftet ist. Das würde ich es gleich mal ändern und als da kriegen wir irgendwas raus. Hier gebe ich noch sizeof an. sizeof ist die Größe unserer Struktur, ist nämlich 8 bytes, von u1 habe ich hier angegeben mit sizeof. Das ist nämlich der double, der 8 bytes belegt. Die anderen belegen eingentlich weniger. Jetzt kann ich mal hier was Trickreiches zeigen, anstatt dass ich diesen Wert hier hinschreibe. Machen wir jetzt mal hier 0x. Ich nehme eine Dezimalschreibweise, damit ich hier an diesen long leicht dran komme, 1000. So, damit belege ich jetzt das vordere Byte mit 10. Und wir schauen uns einfach mal an, was dabei rauskommt. Wenn ich hier unten das Ganze interpretiere, das sehen Sie schon, da hat sich der Wert geändert. Jetzt steht nämlich nicht mehr die 65 da, sondern 4161, und das ist, wenn man es jetzt hier ein bisschen tricky macht. Wir schreiben mal hier einen anderen Wert rein, nämlich einfach statt des "A"s den Wert 0, damit Sie sehen, warum oder was da genau passiert. Starte ich das Ganze nochmal an der Stelle, und Sie sehen, jetzt hier unten kommt 4096, wenn ich jetzt 0 drauf addiere auf das Zeichen. Wenn ich hier 32 [unverständlich] und mal 32 eingebe, dann schauen wir uns mal an, was unten steht. Dann kommt nämlich 4096 + 32 raus. Und das ist genau der Effekt. Ich habe hier hinten nur das letzte Byte geändert durch diese Zuweisung hier, der long-Wert hier oben ist, aber nach wie vor drin, und bekomme hier einen sozusagen gemischten long-Wert. Also, mit diesen unions muss man ein bisschen aufpassen, das kann manchmal auch ganz tricky sein und Absicht sein, eine Möglichkeit zum Beispiel hier den double zu bekommen, und wenn ich hier 2 longs reinschreiben würde, das muss man ein bisschen aufbauen. Dann könnte man auf die Art und Weise sich nämlich einen double auch selber zusammenbasteln und bekommt dann eine Darstellung des doubles an dieser Stelle jetzt hier. Also, trickreiche Geschichte mit den unions kann man ziemlich böse Sachen auch machen. Manchmal braucht man Sie einfach auch bei der Ansteuerung von Peripherie-Einheiten, zum Beispiel kann das notwendig sein, und wie gesagt, beim Austausch von Daten, ist es auch unter Umständen praktische Geschichte, ansonsten früher war es ja ganz toll, hat man Speicher gehabt, weil hier belege ich eigentlich nur die größte Speichereinheit von den Variablen, nämlich von dem double, und nicht die Summe der Einzelspeicherzellen. Wenn ich hier aber die Struktur draus mache, bin ich auf der sicheren Seite. Wenn ich eine komplizierte Geschichte habe, die sich oft wiederholen kann, kann sie durchaus voll sein, hier Speicher zu sparen auf die Art und Weise, aber man erkauft sich dadurch natürlich Möglichkeit, Fehler zu machen, wenn ich hier falsche Werte auslese, einfach den falschen Namen erfische, dehalb ist diese union Geschichte ein bisschen problematisch, aber soweit formuliere es mal dabei. Wir lassen, damit Sie auch wissen, wenn Sie so was mal im Scroll ziehen, was es bedeutet.

C++

Machen Sie sich mit den einfachen Grundlagen zu C++ vertraut und lernen Sie anhand zahlreicher Übungs- und Codebeispiele die Klassenkonzepte, Prozeduren und Funktionen kennen.

9 Std. 3 min (143 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Video-Training auf DVD mit Bonusmagazin

+ Tutorial to go: Mit Videos für iPod, iPhone & Co.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!