Hallo und willkommen zurück.
In dieser Vorlesung möchte ich über die Beziehung zwischen Zeigern und Arrays sprechen.
Es gibt eine starke Beziehung, und wir müssen diese Beziehung verstehen, bevor wir
tatsächlich über Zeigerarithmetik sprechen können. Also lasst uns anfangen.
Ein Array ist eine Sammlung von Objekten desselben Typs,
auf die Sie mit einem einzigen Namen verweisen können. Wir wissen, dass wir mittlerweile ziemlich gut in Arrays sind.
Wir verwenden das Zeichenarray jetzt seit einigen Abschnitten.
Es ist ein Array, auf das Sie zugreifen können, indem Sie einen
Index oder einen Index in diesen Klammern verwenden. Wir erinnern uns daran.
Wir wissen, dass Arrays auf Null basieren und bei Null beginnen.
Aber auch hier ist es nur eine Möglichkeit, mehrere Monate mit demselben Variablennamen zu halten.
Ein Zeiger ist eine Variable, deren Wert eine Speicheradresse hat, und er
kann auf
eine andere Variable oder Konstante eines bestimmten Typs verweisen.
Wir sollten an dieser Stelle auch ziemlich klar sein, was ein Zeiger ist.
Es enthält nur eine Speicheradresse.
Sie können einen Zeiger verwenden, um die Adresse verschiedener Variablen zu verschiedenen Zeiten zu speichern.
Aber du musst den gleichen Typ haben. Ein int-Zeiger muss
zeigen, um die Adresse eines int-Typs wiederherzustellen.
Arrays und Zeiger scheinen sehr unterschiedlich zu
sein, sind jedoch sehr eng miteinander verbunden und können manchmal austauschbar verwendet
werden, insbesondere mit dem Zeichenarray.
Sie können tatsächlich ein Zeichen erstellen, an das Sie sich erinnern,
das eine Zeichenfolge ist, und Sie können einen Zeichenzeiger erstellen, der im Wesentlichen dasselbe ist.
Es gibt nur geringfügige
Unterschiede, ob Sie Speicher zuweisen oder mit einem Zeichenzeiger freigeben.
Bei einem Zeichenarray müssen Sie das nicht
tun, aber ein Zeichen a hat auch eine feste Größe.
Wenn Sie also eine Zeichenarray-Zeichenfolge mit
20 als Größe erstellen, können Sie nur 19 Zeichen speichern.
Mit dem Zeichenzeiger können Sie die dynamische Speicherverwaltung
verwenden und die Größe erhöhen oder verringern. Dies kann
hinsichtlich des Speichers effizienter sein.
Eine der häufigsten Verwendungen von Zeigern in c sind jedoch Zeiger auf Arrays.
In diesem Fall verwenden
Sie am häufigsten Zeiger, insbesondere auf Zeichen.
Der Zeichenzeiger entspricht einem Zeichenarray.
Die Hauptgründe für die Verwendung von
Zeigern zum Löschen sind die Bequemlichkeit der Notation und die Programmeffizienz.
Sie können also in vielen Fällen entweder ein Array oder einen Zeiger verwenden,
es sei denn, Sie sprechen von dynamischer Speicherverwaltung.
Aber in den meisten Fällen können Sie. Und der einzige Unterschied ist die
Syntax, die Notation.
Es geht darum, ob Sie einen Index verwenden, um auf ein
Element zuzugreifen, oder ob Sie Punktarithmetik
verwenden, ob Sie den Zeichenzeiger verwenden, um auf die spezifische Adresse dieses Elements zu verweisen.
Es ist auch effizienter, Zeichenzeiger zu verwenden.
Zeiger auf Arrays führen im Allgemeinen zu Code, der weniger Speicher benötigt und schneller ausgeführt wird.
Sie möchten also so viel wie möglich einen Zeiger für
Zeichen und einen Zeiger auf andere Datentypen verwenden.
Weil es schneller ist und weniger Speicher benötigt. Zeiger über Arrays zum größten Teil.
Wenn Sie ein Array von 100 Ganzzahlen haben, wissen
wir, was dies bedeutet. Sie sagen einfach, dass der int-Wert 100 ist. 100 ist die Größe.
Das heißt, Sie können 100 Ganzzahlen in diesem Array speichern.
Sie können auch einen Zeiger definieren. Wir werden es Wertezeiger nennen, da
es auf das Werte-Array zeigt
und es verwendet werden kann, um auf die in diesem Array enthaltenen Ganzzahlen zuzugreifen.
Also sagen wir einfach Instar-Wertezeiger. Wir wissen, wie man an dieser Stelle einen Zeiger deklariert.
Wenn Sie einen Zeiger definieren, der zum Zeigen auf die Elemente des
Arrays verwendet wird, legen Sie den Zeiger nicht als Typzeiger auf das Array fest.
Bis zu diesem Punkt haben wir nur von Zeiger auf Ende und
Zeiger auf Doppel gehört.
Wenn Sie jedoch Arrays verwenden, sagen Sie nicht spitzes Array.
Dieser tatsächliche Zeiger zeigt auf ein bestimmtes Element, das im Array enthalten ist.
Denken Sie also daran. Es ist nicht das gesamte Array, wenn
Sie einen Zeiger mit der Adresse von Werten löschen.
Um den Wertezeiger so zu setzen, dass er auf das erste Element des Wertearrays zeigt, müssen
Sie nur sagen, dass Werte zeigen oder gleich Werte sind.
Sie müssen die Adresse dort nicht eingeben oder so. Weil das
Wertearray ein Zeiger ist.
Das ist es, was Sie in Ihrem Kopf fahren müssen,
all diese Arrays sind Zeiger unter der Motorhaube.
Wenn Sie also einem Zeiger das erste
Element eines Arrays zuweisen möchten, müssen Sie nur das Array auf der rechten Seite
des Gleichheitsoperators angeben und auf
der linken Seite haben Sie nur den Wertezeiger.
Dies zeigt auf die erste Adresse im Array oder das erste Element.
Der Adressoperator wird nicht verwendet. Beachten Sie dies.
Der c-Compiler behandelt das Erscheinungsbild eines Array-Namens ohne
Index als Zeiger auf das Array.
Wenn Sie also Werte ohne Index angeben,
wird ein Zeiger auf das erste Werteelement erstellt.
Dies bedeutet, dass Sie jetzt auf nachfolgende Werte im Array verweisen
können, indem Sie einfach den Zeiger erhöhen, um zur nächsten Adresse zu gelangen.
Und darüber werden wir in den nächsten Vorträgen sprechen, wenn wir über Punktarithmetik sprechen.
Und es ist wirklich nur eine Notationssache und es ist auch eine Effizienzsache.
Eine äquivalente Möglichkeit, einen Zeiger auf den Anfang von Werten zu erzeugen, besteht darin,
die Adresse des Operators auch auf das erste Element von rechts anzuwenden.
Sie können es also auf zwei Arten tun, beide Wege sind in Ordnung.
Sie können dies aber auch tun. Man könnte Wertezeigeradresse mit einem Wert unter Null sagen.
Dadurch wird der Wertezeiger auf das erste Element im Array gesetzt.
Sie können also diesen verwenden oder einfach sagen, dass Werte Punkt gleich Wert sind.
Ohne das kaufmännische Und und ohne den Index
ist es natürlich etwas weniger Code oder einfacher zu schreiben.
Dies ist möglicherweise etwas klarer, da Sie
nicht unbedingt wissen, dass Werte ein Array sind, es sei denn, Sie sehen sich die Deklaration an.
Aber auch hier ist jeder Weg in Ordnung. Der Wertezeiger entspricht den Werten oder
der Wertezeiger entspricht der Adresse des Werts unter Null.
Es ist eine Frage der Programmiererpräferenz. Und wieder ist es eine Notationssache.
Um es noch
einmal zu wiederholen: Wenn Sie zwei Ausdrücke ar
sub-i und asterisk ar plus i haben,
haben diese eine äquivalente Bedeutung.
Wir möchten nur sicherstellen, dass Sie dies verstehen.
Beide funktionieren, wenn ar der Name eines Arrays ist.
Sie können den Zeiger verwenden und die Referenzierung aufheben.
Und beide funktionieren, wenn es sich um eine Zeigervariable handelt.
Die Verwendung eines Ausdrucks wie ar plus plus funktioniert nur, wenn ar eine Zeigervariable ist.
Sie können ein Array also nicht inkrementieren, indem Sie
plus plus sagen und erwarten, dass es zum nächsten Element wechselt.
Sie können dies nur für Array-Zeiger oder Zeiger tun.
Wenn wir also ar haben, das ist ein Zeiger, der auf ein Array zeigt, und wir
zum nächsten Element gehen möchten, können wir es jedes Mal erhöhen.
Wenn Sie jedoch ar sub-i sagen, weil ar sub i ein Array und
ein Array ein Zeiger ist, können Sie es dereferenzieren, indem Sie sagen, ar
ar ist ein Zeiger,
den wir ar plus i zugewiesen haben. Es ist dasselbe.
In den nächsten Vorlesungen werden wir uns also mit Punktarithmetik
befassen, und dies hängt stark mit der Beziehung zwischen Arrays und Zeigern zusammen.
Zeiger können Arrays sein. Es ist kein Zeigerarray, es ist ein Element.
Sie können also die Adresse eines Zeigers verwenden, um durch
ein Array zu navigieren und durch ein
Array zu iterieren. Vielen Dank.