>> [Musikwiedergabe]
>> DOUG LLOYD: OK.
Wir haben mit Zahlen gearbeitet, wir haben mit den Charakteren arbeitet,
wir haben gearbeitet Schwimmern, Doppelzimmer, Strings und bools.
Wir haben so ziemlich alle erschöpft der [unverständlich] Typen,
zur Verfügung standen, um uns alle zusammen.
Aber jetzt wollen wir etwas mehr zu tun.
Wie machen wir das?
Wie können wir verschiedene Datentypen zu erstellen?
Wir können dies tun, indem Sie Strukturen.
So Strukturen erlauben uns, zu vereinheitlichen Variablen unterschiedlichen Typs
in einem einzigen, neuen Variablentyp, die wir sein eigenes Typennamen zuweisen.
Dies ist eine wirklich starke was zu der Lage zu tun,
denn wir können nun Gruppen Elemente unterschiedlicher Datentypen
zusammen, die eine logische Verbindung.
Wir waren in der Lage, dies zu tun mit Arrays Art, nicht wahr?
Wir können Gruppengrößen des gleichen Datentyps
zusammen in einer großen Einheit der Speicher ein Array.
>> Aber wir haben nicht in der Lage zu mischen up verschiedenen Datentypen zusammen.
Wir können nicht sagen, Paar eine ganze Zahl, und ein Zeichen, und ein Doppel alle
in der gleichen Sache und rufen, dass eine einzige Einheit.
Jedoch mit Strukturen oder oft bezeichnet als Strukturen,
wir eigentlich können.
So eine Struktur ist eine Art der wie ein Super-Variable.
Es ist eine Variable, die enthält andere Variablen innerhalb der IT.
Also hier ist ein Beispiel dafür, eine sehr einfache Struktur.
Dies ist, was die Syntax aussehen würde, gefallen, um eine Struktur für ein Fahrzeug zu schaffen.
Lassen Sie uns nun über die Syntax finden Sie hier.
Struct, das ist das Schlüsselwort, das angibt,
dass ich die Schaffung eines neuen Datentyp hier.
Insbesondere ist der Name des Datentyps werde struct Auto, wie wir sehen werden.
Aber das ist die Art von Spitze off an den Compiler, dass diese
als eine Gruppe von Variablen, die gehen, um als Teil des gleichen Typs werden
in einer Minute.
>> Cars, nur der Name der Struktur.
Auch der Datentyp hier wird um struct Auto, nicht nur Auto.
Aber wenn Sie different-- haben wenn Sie mehrere Strukturen zu schaffen
im gleichen Programm, um benötigen Sie unterscheidet zwischen Struktur und Struktur.
So struct Auto, könnte ich auch struct Student zum Beispiel
in demselben Programm.
Innerhalb der geschweiften Klammern sind alle sogenannten Feldern
oder Elemente der Struktur.
Also, was sind einige der Dinge, , die inhärent in einem Auto sind?
Nun, es hat in der Regel ein Jahr hat ein Modellnamen und ein Nummernschild,
einen Kilometerzähler, die in der Regel hat einige Anzahl von Meilen auf dem Tacho,
und vielleicht ein Motorgröße.
Und wie Sie sehen können, bin ich durcheinander Zahlen und Buchstaben und Doppelzimmer.
Sie sind alle sein wird Teil dieser neuen Datentyp.
>> Schließlich die letzte Sache, die ich tun müssen, vergessen Sie nicht, diese kleine Semikolon
Am Ende.
Nachdem wir die Definition der Struktur abgeschlossen haben, wir brauchen, um ein Semikolon am Ende zu setzen.
Es ist eine sehr häufige syntaktische Fehler, denn mit einer Funktion,
zum Beispiel müssen Sie nur noch würde offene geschweifte Klammer, in der Nähe geschweifte Klammer.
Man steckt nicht ein Semikolon am Ende einer Funktionsdefinition.
Das sieht aus wie eine Funktion Definition, aber es ist nicht,
und so das Semikolon gibt ist nur eine Erinnerung, dass Sie
brauchen, um es dort zu setzen, weil der Compiler sonst nicht
wissen, was damit zu tun.
Es ist ein sehr häufiger Fehler versehentlich machen
wenn man zuerst definieren Strukturen.
>> OK.
So definieren wir in der Regel unsere Strukturen an der Spitze unserer Programme
weil sie wahrscheinlich von mehreren Funktionen verwendet werden.
Wir wollen nicht, um eine Definition struct innerhalb einer Funktion,
denn dann können wir die only-- Umfang der Struktur wirklich
existiert nur innerhalb dieser Funktion.
Wir würden wahrscheinlich wollen, um eine Struktur zu definieren also können wir es in mehreren Funktionen zu verwenden,
oder vielleicht in mehreren Dateien, die miteinander verbunden sind
zu unserem einzigen Programm zu erstellen.
Manchmal auch anstelle der Definition der Struktur
an der Spitze, wo du deine Pfund umfasst und Ihre Pfund definiert,
zum Beispiel, können Sie sie setzen in separater Punkt h-Dateien, die Sie dann
Pfund gehören selbst.
>> So haben wir Strukturen, aber jetzt wir brauchen, um in ihnen zu bekommen.
Wie können wir innerhalb erhalten eine Struktur, um den Zugang
diese Untervariablen, die Variablen dass im Inneren der Struktur gibt es?
Na ja, so etwas wie wir der Punkt-Operator, die es uns ermöglicht
die Felder der Struktur zuzugreifen.
So zum Beispiel, sagen wir, ich erklärt habe meine Struktur-Datentyp irgendwo
Oben meines Programms oder möglicherweise in ein Punkt h-Datei, die ich habe Pfund enthalten.
Wenn ich dann eine neue zu erstellen Variable dieses Datentyps kann ich sagen,
struct Auto, mein Auto, Semikolon.
Genau wie ich könnte sagen, int x oder string name Semikolon.
>> Der Datentyp ist hier struct Auto, der Name der Variable ist mein Auto,
und dann kann ich den Punktoperator verwenden Zugang zu den verschiedenen Bereichen der mein Auto.
So kann ich mein Auto sagen dot Jahr 2011 entspricht.
Das ist völlig in Ordnung.
Jahr, wenn Sie sich erinnern, wurde als eine definierte Integer-Feld innerhalb dieser Struktur Auto
Dateityp.
So dass jede Variable der Struktur Car Data Typ, wie mein Auto, ich kann sagen, dass mein Auto
dot Jahr gleich und weisen Sie dann es einige Integer-Wert 2011.
Mein Auto dot Platte gleich CS50.
Meine Karte dot Kilometerzähler gleich 50505 Semikolon.
Alle von ihnen sind völlig in Ordnung, und das ist,
wie wir Zugriff auf den Felder der Struktur.
Strukturen allerdings nicht brauchen auf den Stapel angelegt werden.
Genau wie jede andere Variable, die wir dynamisch ordnen sie.
Wenn wir ein Programm, das könnte generieren viele Strukturen,
wir wissen nicht, wie viele wir gehen zu müssen,
dann müssen wir dynamisch zuweisen diese Strukturen
wie unser Programm ausgeführt wird.
Und so, wenn wir gehen, um die Zugriffs Felder einer Struktur in diesem Zusammenhang,
Recall, die wir brauchen zunächst zu dereferenzieren der Zeiger auf die Struktur,
und dann, sobald wir das dereferenzieren Zeiger, dann können wir die Felder zugreifen.
Wenn wir nur ein Zeiger auf die Struktur,
wir können nicht einfach Zeiger Punktfeld sagen zu nennen und bekommen, was wir suchen.
Es gibt den zusätzlichen Schritt der Dereferenzierung.
Also lassen Sie uns sagen, dass anstelle des previous--
wie im vorherigen Beispiel, statt deklarieren
auf den Stapel, Struktur Auto, mein Auto, Semikolon, sage ich struct Auto,
Stern, ein Zeiger auf eine struct Auto namens mein Auto,
gleich malloc Größe struct Auto.
Größe der wir herausfinden, wie viele Bytes Ihren neuen Datentyp nimmt.
Sie müssen nicht unbedingt nur verwenden müssen Größe, Breite, int oder char oder irgend
der eingebauten Datentypen.
Der Compiler ist intelligent genug, um herauszufinden, wie viele Bytes
werden von Ihrem neuen Struktur erforderlich.
Also habe ich mir eine malloc Speichereinheit groß genug, um eine Struktur Auto zu halten,
und ich bekomme einen Zeiger zurück in diesem Speicherblock,
und Zeiger zu meinem Auto zugeordnet.
>> Nun, wenn ich will, um den Zugang die Felder meines Autos,
Ich zum ersten Mal dereferenzieren mein Auto mit die Dereferenzierungsoperator, Sterne
dass wir von den Zeigern gesehen haben Videos, und dann, nachdem ich dereferenzieren,
dann kann ich den Punkt-Operator zu verwenden Zugang zu den verschiedenen Bereichen der mein Auto.
Star mein Auto dot Jahr 2011 entspricht.
Das würde die Wirkung haben wir wollen, in diesem Fall
weil wir dynamisch haben mein Auto zugeordnet.
>> Das ist irgendwie nervig, wenn auch, nicht wahr?
Es gibt ein 2-Stufen-Prozess jetzt.
Jetzt müssen wir dereference-- Wir haben einen Stern-Operator,
und wir haben einen Punkt-Operator.
Und wie man erwarten könnte, weil C-Programmierer lieben kürzere Wege
Dinge zu tun, gibt es eine kürzeren Weg, dies zu tun.
Es gibt einen anderen Betreiber genannt Pfeil, wodurch dieser Prozess sehr viel einfacher.
Die Art und Weise funktioniert, ist Pfeil es zuerst dereferenziert
der Zeiger auf der linken Seite Seite des Operators,
und dann, nachdem dereferenziert der Zeiger auf der linken Seite,
er das Feldzugriffen auf der rechten Seite.
Und so hatten wir zuvor diese Art von Star mein Auto dot all dieses Zeug,
als gäbe es eine Menge los dort.
Aber was können wir stattdessen tun ist this-- mein Auto arrow Jahr 2011 entspricht.
>> Auch hier ist das, was hier geschieht?
Erstens, ich bin Dereferenzierung meinem Auto.
Was wiederum, ist ein Zeiger hier.
Dann, nachdem dereferenziert mein Auto, ich
können dann auf die Felder Jahres, Platte, und Kilometerzähler
nur, wie ich konnte, bevor mit ersten gebrauchte Sterne zu dereferenzieren mein Auto,
und punktieren, um das Feld zu gelangen.
So können Sie Strukturen haben, können Zeiger auf Strukturen haben,
und Sie Möglichkeiten, um Zugriff haben Felder dieser Strukturen,
ob Sie Hinweise zu müssen sie oder die Variablen selbst.
Punkt oder Pfeil, je nachdem, wie die Variable deklariert wurde.
Ich bin Doug Lloyd, ist dies CS50.