Zeiger gegen Array
Ein Zeiger ist ein Datentyp, der eine Referenz auf einen Speicherort enthält (dh eine Zeigervariable speichert eine Adresse eines Speicherorts, in dem einige Daten gespeichert sind). Arrays sind die am häufigsten verwendete Datenstruktur zum Speichern einer Sammlung von Elementen. Die meisten Programmiersprachen bieten Methoden zum einfachen Deklarieren von Arrays und zum Zugriff auf Elemente in den Arrays.
Was ist ein Zeiger?
Ein Zeiger ist ein Datentyp, der eine Adresse eines Speicherorts speichert, in dem einige Daten gespeichert sind. Mit anderen Worten, ein Zeiger enthält eine Referenz auf einen Speicherort. Der Zugriff auf die Daten, die in dem Speicherort gespeichert sind, auf den der Zeiger verweist, wird als Dereferenzierung bezeichnet. Wenn sich wiederholende Vorgänge wie das Durchlaufen von Bäumen / Zeichenfolgen, Tabellensuchen usw. ausgeführt werden, würde die Verwendung von Zeigern die Leistung verbessern. Dies liegt daran, dass das Dereferenzieren und Kopieren von Zeigern billiger ist als das tatsächliche Kopieren und Zugreifen auf die Daten, auf die die Zeiger zeigen. Ein Nullzeiger ist ein Zeiger, der auf nichts zeigt. In Java würde der Zugriff auf einen Nullzeiger eine Ausnahme erzeugen, die als NullPointerException bezeichnet wird.
Was ist ein Array?
In Abbildung 1 ist ein Code dargestellt, der normalerweise zum Deklarieren und Zuweisen von Werten zu einem Array verwendet wird. Abbildung 2 zeigt, wie ein Array im Speicher aussehen würde.
Werte [0] = 100; Werte [1] = 101; Werte [2] = 102; Werte [3] = 103; Werte [4] = 104; |
Abbildung 1: Code zum Deklarieren und Zuweisen von Werten zu einem Array
100 | 101 | 102 | 103 | 104 |
Index: 0 | 1 | 2 | 3 | 4 |
Abbildung 2: Im Speicher gespeichertes Array
Der obige Code definiert ein Array, das 5 Ganzzahlen speichern kann und auf das mit den Indizes 0 bis 4 zugegriffen wird. Eine wichtige Eigenschaft eines Arrays besteht darin, dass das gesamte Array als einzelner Speicherblock zugewiesen wird und jedes Element seinen eigenen Speicherplatz im Array erhält. Sobald ein Array definiert ist, ist seine Größe festgelegt. Wenn Sie sich also beim Kompilieren nicht sicher sind, wie groß das Array ist, müssen Sie ein Array definieren, das groß genug ist, um auf der sicheren Seite zu sein. In den meisten Fällen werden wir jedoch weniger Elemente verwenden, als wir zugewiesen haben. So wird tatsächlich eine beträchtliche Menge an Speicher verschwendet. Wenn andererseits das "ausreichend große Array" nicht groß genug ist, stürzt das Programm ab.
Was ist der Unterschied zwischen Zeigern und Arrays?
Ein Zeiger ist ein Datentyp, der eine Adresse eines Speicherorts speichert, in dem einige Daten gespeichert sind, während Arrays die am häufigsten verwendete Datenstruktur zum Speichern einer Sammlung von Elementen sind. In der Programmiersprache C erfolgt die Array-Indizierung mithilfe der Zeigerarithmetik (dh das i-te Element des Arrays x entspricht * (x + i)). Daher kann in C eine Reihe von Zeigern, die auf eine Reihe aufeinanderfolgender Speicherstellen zeigen, als Array betrachtet werden. Ferner gibt es einen Unterschied darin, wie der Operator sizeof auf Zeigern und Arrays arbeitet. Bei Anwendung auf ein Array gibt der Operator sizeof die gesamte Größe des Arrays zurück, während bei Anwendung auf einen Zeiger nur die Größe des Zeigers zurückgegeben wird.