1 00:00:00,000 --> 00:00:02,395 >> [Musikwiedergabe] 2 00:00:02,395 --> 00:00:05,750 3 00:00:05,750 --> 00:00:06,506 >> DOUG LLOYD: OK. 4 00:00:06,506 --> 00:00:08,880 Wir haben mit Zahlen gearbeitet, wir haben mit den Charakteren arbeitet, 5 00:00:08,880 --> 00:00:11,930 wir haben gearbeitet Schwimmern, Doppelzimmer, Strings und bools. 6 00:00:11,930 --> 00:00:14,870 Wir haben so ziemlich alle erschöpft der [unverständlich] Typen, 7 00:00:14,870 --> 00:00:17,100 zur Verfügung standen, um uns alle zusammen. 8 00:00:17,100 --> 00:00:19,430 Aber jetzt wollen wir etwas mehr zu tun. 9 00:00:19,430 --> 00:00:20,210 Wie machen wir das? 10 00:00:20,210 --> 00:00:22,560 Wie können wir verschiedene Datentypen zu erstellen? 11 00:00:22,560 --> 00:00:26,130 Wir können dies tun, indem Sie Strukturen. 12 00:00:26,130 --> 00:00:30,180 So Strukturen erlauben uns, zu vereinheitlichen Variablen unterschiedlichen Typs 13 00:00:30,180 --> 00:00:34,810 in einem einzigen, neuen Variablentyp, die wir sein eigenes Typennamen zuweisen. 14 00:00:34,810 --> 00:00:37,570 Dies ist eine wirklich starke was zu der Lage zu tun, 15 00:00:37,570 --> 00:00:40,900 denn wir können nun Gruppen Elemente unterschiedlicher Datentypen 16 00:00:40,900 --> 00:00:43,910 zusammen, die eine logische Verbindung. 17 00:00:43,910 --> 00:00:46,440 Wir waren in der Lage, dies zu tun mit Arrays Art, nicht wahr? 18 00:00:46,440 --> 00:00:49,540 Wir können Gruppengrößen des gleichen Datentyps 19 00:00:49,540 --> 00:00:53,410 zusammen in einer großen Einheit der Speicher ein Array. 20 00:00:53,410 --> 00:00:56,660 >> Aber wir haben nicht in der Lage zu mischen up verschiedenen Datentypen zusammen. 21 00:00:56,660 --> 00:01:02,610 Wir können nicht sagen, Paar eine ganze Zahl, und ein Zeichen, und ein Doppel alle 22 00:01:02,610 --> 00:01:05,330 in der gleichen Sache und rufen, dass eine einzige Einheit. 23 00:01:05,330 --> 00:01:08,830 Jedoch mit Strukturen oder oft bezeichnet als Strukturen, 24 00:01:08,830 --> 00:01:09,585 wir eigentlich können. 25 00:01:09,585 --> 00:01:12,370 So eine Struktur ist eine Art der wie ein Super-Variable. 26 00:01:12,370 --> 00:01:16,530 Es ist eine Variable, die enthält andere Variablen innerhalb der IT. 27 00:01:16,530 --> 00:01:19,650 Also hier ist ein Beispiel dafür, eine sehr einfache Struktur. 28 00:01:19,650 --> 00:01:23,380 Dies ist, was die Syntax aussehen würde, gefallen, um eine Struktur für ein Fahrzeug zu schaffen. 29 00:01:23,380 --> 00:01:25,250 Lassen Sie uns nun über die Syntax finden Sie hier. 30 00:01:25,250 --> 00:01:27,400 Struct, das ist das Schlüsselwort, das angibt, 31 00:01:27,400 --> 00:01:30,270 dass ich die Schaffung eines neuen Datentyp hier. 32 00:01:30,270 --> 00:01:33,860 Insbesondere ist der Name des Datentyps werde struct Auto, wie wir sehen werden. 33 00:01:33,860 --> 00:01:36,640 Aber das ist die Art von Spitze off an den Compiler, dass diese 34 00:01:36,640 --> 00:01:42,440 als eine Gruppe von Variablen, die gehen, um als Teil des gleichen Typs werden 35 00:01:42,440 --> 00:01:44,010 in einer Minute. 36 00:01:44,010 --> 00:01:46,340 >> Cars, nur der Name der Struktur. 37 00:01:46,340 --> 00:01:50,590 Auch der Datentyp hier wird um struct Auto, nicht nur Auto. 38 00:01:50,590 --> 00:01:53,060 Aber wenn Sie different-- haben wenn Sie mehrere Strukturen zu schaffen 39 00:01:53,060 --> 00:01:56,950 im gleichen Programm, um benötigen Sie unterscheidet zwischen Struktur und Struktur. 40 00:01:56,950 --> 00:02:00,140 So struct Auto, könnte ich auch struct Student zum Beispiel 41 00:02:00,140 --> 00:02:01,790 in demselben Programm. 42 00:02:01,790 --> 00:02:05,980 Innerhalb der geschweiften Klammern sind alle sogenannten Feldern 43 00:02:05,980 --> 00:02:07,954 oder Elemente der Struktur. 44 00:02:07,954 --> 00:02:10,370 Also, was sind einige der Dinge, , die inhärent in einem Auto sind? 45 00:02:10,370 --> 00:02:15,270 Nun, es hat in der Regel ein Jahr hat ein Modellnamen und ein Nummernschild, 46 00:02:15,270 --> 00:02:18,000 einen Kilometerzähler, die in der Regel hat einige Anzahl von Meilen auf dem Tacho, 47 00:02:18,000 --> 00:02:19,225 und vielleicht ein Motorgröße. 48 00:02:19,225 --> 00:02:23,570 Und wie Sie sehen können, bin ich durcheinander Zahlen und Buchstaben und Doppelzimmer. 49 00:02:23,570 --> 00:02:26,420 Sie sind alle sein wird Teil dieser neuen Datentyp. 50 00:02:26,420 --> 00:02:29,750 >> Schließlich die letzte Sache, die ich tun müssen, vergessen Sie nicht, diese kleine Semikolon 51 00:02:29,750 --> 00:02:30,290 Am Ende. 52 00:02:30,290 --> 00:02:34,380 Nachdem wir die Definition der Struktur abgeschlossen haben, wir brauchen, um ein Semikolon am Ende zu setzen. 53 00:02:34,380 --> 00:02:37,325 Es ist eine sehr häufige syntaktische Fehler, denn mit einer Funktion, 54 00:02:37,325 --> 00:02:40,200 zum Beispiel müssen Sie nur noch würde offene geschweifte Klammer, in der Nähe geschweifte Klammer. 55 00:02:40,200 --> 00:02:42,950 Man steckt nicht ein Semikolon am Ende einer Funktionsdefinition. 56 00:02:42,950 --> 00:02:46,430 Das sieht aus wie eine Funktion Definition, aber es ist nicht, 57 00:02:46,430 --> 00:02:49,653 und so das Semikolon gibt ist nur eine Erinnerung, dass Sie 58 00:02:49,653 --> 00:02:52,440 brauchen, um es dort zu setzen, weil der Compiler sonst nicht 59 00:02:52,440 --> 00:02:53,510 wissen, was damit zu tun. 60 00:02:53,510 --> 00:02:56,160 Es ist ein sehr häufiger Fehler versehentlich machen 61 00:02:56,160 --> 00:02:58,570 wenn man zuerst definieren Strukturen. 62 00:02:58,570 --> 00:02:59,500 >> OK. 63 00:02:59,500 --> 00:03:02,824 So definieren wir in der Regel unsere Strukturen an der Spitze unserer Programme 64 00:03:02,824 --> 00:03:05,490 weil sie wahrscheinlich von mehreren Funktionen verwendet werden. 65 00:03:05,490 --> 00:03:08,850 Wir wollen nicht, um eine Definition struct innerhalb einer Funktion, 66 00:03:08,850 --> 00:03:12,110 denn dann können wir die only-- Umfang der Struktur wirklich 67 00:03:12,110 --> 00:03:13,790 existiert nur innerhalb dieser Funktion. 68 00:03:13,790 --> 00:03:17,450 Wir würden wahrscheinlich wollen, um eine Struktur zu definieren also können wir es in mehreren Funktionen zu verwenden, 69 00:03:17,450 --> 00:03:20,670 oder vielleicht in mehreren Dateien, die miteinander verbunden sind 70 00:03:20,670 --> 00:03:22,920 zu unserem einzigen Programm zu erstellen. 71 00:03:22,920 --> 00:03:24,920 Manchmal auch anstelle der Definition der Struktur 72 00:03:24,920 --> 00:03:27,961 an der Spitze, wo du deine Pfund umfasst und Ihre Pfund definiert, 73 00:03:27,961 --> 00:03:32,080 zum Beispiel, können Sie sie setzen in separater Punkt h-Dateien, die Sie dann 74 00:03:32,080 --> 00:03:35,020 Pfund gehören selbst. 75 00:03:35,020 --> 00:03:37,620 >> So haben wir Strukturen, aber jetzt wir brauchen, um in ihnen zu bekommen. 76 00:03:37,620 --> 00:03:39,800 Wie können wir innerhalb erhalten eine Struktur, um den Zugang 77 00:03:39,800 --> 00:03:43,530 diese Untervariablen, die Variablen dass im Inneren der Struktur gibt es? 78 00:03:43,530 --> 00:03:46,810 Na ja, so etwas wie wir der Punkt-Operator, die es uns ermöglicht 79 00:03:46,810 --> 00:03:50,990 die Felder der Struktur zuzugreifen. 80 00:03:50,990 --> 00:03:55,490 So zum Beispiel, sagen wir, ich erklärt habe meine Struktur-Datentyp irgendwo 81 00:03:55,490 --> 00:03:59,020 Oben meines Programms oder möglicherweise in ein Punkt h-Datei, die ich habe Pfund enthalten. 82 00:03:59,020 --> 00:04:03,360 Wenn ich dann eine neue zu erstellen Variable dieses Datentyps kann ich sagen, 83 00:04:03,360 --> 00:04:06,260 struct Auto, mein Auto, Semikolon. 84 00:04:06,260 --> 00:04:11,580 Genau wie ich könnte sagen, int x oder string name Semikolon. 85 00:04:11,580 --> 00:04:18,100 >> Der Datentyp ist hier struct Auto, der Name der Variable ist mein Auto, 86 00:04:18,100 --> 00:04:23,770 und dann kann ich den Punktoperator verwenden Zugang zu den verschiedenen Bereichen der mein Auto. 87 00:04:23,770 --> 00:04:27,494 So kann ich mein Auto sagen dot Jahr 2011 entspricht. 88 00:04:27,494 --> 00:04:28,410 Das ist völlig in Ordnung. 89 00:04:28,410 --> 00:04:34,210 Jahr, wenn Sie sich erinnern, wurde als eine definierte Integer-Feld innerhalb dieser Struktur Auto 90 00:04:34,210 --> 00:04:35,200 Dateityp. 91 00:04:35,200 --> 00:04:39,966 So dass jede Variable der Struktur Car Data Typ, wie mein Auto, ich kann sagen, dass mein Auto 92 00:04:39,966 --> 00:04:44,030 dot Jahr gleich und weisen Sie dann es einige Integer-Wert 2011. 93 00:04:44,030 --> 00:04:47,290 Mein Auto dot Platte gleich CS50. 94 00:04:47,290 --> 00:04:51,180 Meine Karte dot Kilometerzähler gleich 50505 Semikolon. 95 00:04:51,180 --> 00:04:53,270 Alle von ihnen sind völlig in Ordnung, und das ist, 96 00:04:53,270 --> 00:04:57,802 wie wir Zugriff auf den Felder der Struktur. 97 00:04:57,802 --> 00:05:00,260 Strukturen allerdings nicht brauchen auf den Stapel angelegt werden. 98 00:05:00,260 --> 00:05:02,950 Genau wie jede andere Variable, die wir dynamisch ordnen sie. 99 00:05:02,950 --> 00:05:06,309 Wenn wir ein Programm, das könnte generieren viele Strukturen, 100 00:05:06,309 --> 00:05:08,100 wir wissen nicht, wie viele wir gehen zu müssen, 101 00:05:08,100 --> 00:05:10,800 dann müssen wir dynamisch zuweisen diese Strukturen 102 00:05:10,800 --> 00:05:12,960 wie unser Programm ausgeführt wird. 103 00:05:12,960 --> 00:05:16,600 Und so, wenn wir gehen, um die Zugriffs Felder einer Struktur in diesem Zusammenhang, 104 00:05:16,600 --> 00:05:20,660 Recall, die wir brauchen zunächst zu dereferenzieren der Zeiger auf die Struktur, 105 00:05:20,660 --> 00:05:24,810 und dann, sobald wir das dereferenzieren Zeiger, dann können wir die Felder zugreifen. 106 00:05:24,810 --> 00:05:26,830 Wenn wir nur ein Zeiger auf die Struktur, 107 00:05:26,830 --> 00:05:32,120 wir können nicht einfach Zeiger Punktfeld sagen zu nennen und bekommen, was wir suchen. 108 00:05:32,120 --> 00:05:34,259 Es gibt den zusätzlichen Schritt der Dereferenzierung. 109 00:05:34,259 --> 00:05:36,050 Also lassen Sie uns sagen, dass anstelle des previous-- 110 00:05:36,050 --> 00:05:38,770 wie im vorherigen Beispiel, statt deklarieren 111 00:05:38,770 --> 00:05:43,680 auf den Stapel, Struktur Auto, mein Auto, Semikolon, sage ich struct Auto, 112 00:05:43,680 --> 00:05:48,020 Stern, ein Zeiger auf eine struct Auto namens mein Auto, 113 00:05:48,020 --> 00:05:51,250 gleich malloc Größe struct Auto. 114 00:05:51,250 --> 00:05:54,950 Größe der wir herausfinden, wie viele Bytes Ihren neuen Datentyp nimmt. 115 00:05:54,950 --> 00:05:58,570 Sie müssen nicht unbedingt nur verwenden müssen Größe, Breite, int oder char oder irgend 116 00:05:58,570 --> 00:05:59,715 der eingebauten Datentypen. 117 00:05:59,715 --> 00:06:02,090 Der Compiler ist intelligent genug, um herauszufinden, wie viele Bytes 118 00:06:02,090 --> 00:06:04,170 werden von Ihrem neuen Struktur erforderlich. 119 00:06:04,170 --> 00:06:09,610 Also habe ich mir eine malloc Speichereinheit groß genug, um eine Struktur Auto zu halten, 120 00:06:09,610 --> 00:06:12,410 und ich bekomme einen Zeiger zurück in diesem Speicherblock, 121 00:06:12,410 --> 00:06:16,090 und Zeiger zu meinem Auto zugeordnet. 122 00:06:16,090 --> 00:06:18,050 >> Nun, wenn ich will, um den Zugang die Felder meines Autos, 123 00:06:18,050 --> 00:06:22,615 Ich zum ersten Mal dereferenzieren mein Auto mit die Dereferenzierungsoperator, Sterne 124 00:06:22,615 --> 00:06:26,620 dass wir von den Zeigern gesehen haben Videos, und dann, nachdem ich dereferenzieren, 125 00:06:26,620 --> 00:06:32,200 dann kann ich den Punkt-Operator zu verwenden Zugang zu den verschiedenen Bereichen der mein Auto. 126 00:06:32,200 --> 00:06:35,490 Star mein Auto dot Jahr 2011 entspricht. 127 00:06:35,490 --> 00:06:38,480 Das würde die Wirkung haben wir wollen, in diesem Fall 128 00:06:38,480 --> 00:06:41,960 weil wir dynamisch haben mein Auto zugeordnet. 129 00:06:41,960 --> 00:06:43,610 >> Das ist irgendwie nervig, wenn auch, nicht wahr? 130 00:06:43,610 --> 00:06:44,818 Es gibt ein 2-Stufen-Prozess jetzt. 131 00:06:44,818 --> 00:06:47,460 Jetzt müssen wir dereference-- Wir haben einen Stern-Operator, 132 00:06:47,460 --> 00:06:48,910 und wir haben einen Punkt-Operator. 133 00:06:48,910 --> 00:06:51,660 Und wie man erwarten könnte, weil C-Programmierer lieben kürzere Wege 134 00:06:51,660 --> 00:06:53,740 Dinge zu tun, gibt es eine kürzeren Weg, dies zu tun. 135 00:06:53,740 --> 00:06:57,790 Es gibt einen anderen Betreiber genannt Pfeil, wodurch dieser Prozess sehr viel einfacher. 136 00:06:57,790 --> 00:07:00,750 Die Art und Weise funktioniert, ist Pfeil es zuerst dereferenziert 137 00:07:00,750 --> 00:07:03,560 der Zeiger auf der linken Seite Seite des Operators, 138 00:07:03,560 --> 00:07:06,620 und dann, nachdem dereferenziert der Zeiger auf der linken Seite, 139 00:07:06,620 --> 00:07:09,620 er das Feldzugriffen auf der rechten Seite. 140 00:07:09,620 --> 00:07:14,170 Und so hatten wir zuvor diese Art von Star mein Auto dot all dieses Zeug, 141 00:07:14,170 --> 00:07:15,880 als gäbe es eine Menge los dort. 142 00:07:15,880 --> 00:07:22,040 Aber was können wir stattdessen tun ist this-- mein Auto arrow Jahr 2011 entspricht. 143 00:07:22,040 --> 00:07:23,580 >> Auch hier ist das, was hier geschieht? 144 00:07:23,580 --> 00:07:25,720 Erstens, ich bin Dereferenzierung meinem Auto. 145 00:07:25,720 --> 00:07:27,810 Was wiederum, ist ein Zeiger hier. 146 00:07:27,810 --> 00:07:31,270 Dann, nachdem dereferenziert mein Auto, ich 147 00:07:31,270 --> 00:07:35,130 können dann auf die Felder Jahres, Platte, und Kilometerzähler 148 00:07:35,130 --> 00:07:40,020 nur, wie ich konnte, bevor mit ersten gebrauchte Sterne zu dereferenzieren mein Auto, 149 00:07:40,020 --> 00:07:42,020 und punktieren, um das Feld zu gelangen. 150 00:07:42,020 --> 00:07:45,290 So können Sie Strukturen haben, können Zeiger auf Strukturen haben, 151 00:07:45,290 --> 00:07:48,360 und Sie Möglichkeiten, um Zugriff haben Felder dieser Strukturen, 152 00:07:48,360 --> 00:07:52,600 ob Sie Hinweise zu müssen sie oder die Variablen selbst. 153 00:07:52,600 --> 00:07:57,640 Punkt oder Pfeil, je nachdem, wie die Variable deklariert wurde. 154 00:07:57,640 --> 00:08:00,510 Ich bin Doug Lloyd, ist dies CS50. 155 00:08:00,510 --> 00:08:01,975