Array von Zeigern in C
In C ist ein Zeiger-Array eine homogene Sammlung indizierter Zeigervariablen, die auf einen Speicherort verweisen. Es wird im Allgemeinen in der C-Programmierung verwendet, wenn wir in unserem C-Programm auf mehrere Speicherorte eines ähnlichen Datentyps verweisen möchten. Wir können auf die Daten zugreifen, indem wir den darauf zeigenden Zeiger dereferenzieren.
Syntax:
pointer_type *array_name [array_size];
Hier,
- pointer_type: Datentyp, auf den der Zeiger zeigt. array_name: Name des Arrays von Zeigern. array_size: Größe des Zeiger-Arrays.
Notiz: Es ist wichtig, die Vorrangigkeit und Assoziativität der Operatoren im Array von Zeigerdeklarationen unterschiedlichen Typs im Auge zu behalten, da eine einzelne Änderung eine völlig andere Bedeutung hat. Wenn Sie beispielsweise *Array_Name in die Klammer einschließen, bedeutet dies, dass Array_Name ein Zeiger auf ein Array ist.
Beispiel:
C
// C program to demonstrate the use of array of pointers> #include> int> main()> {> > // declaring some temp variables> > int> var1 = 10;> > int> var2 = 20;> > int> var3 = 30;> > // array of pointers to integers> > int> * ptr_arr[3] = { &var1, &var2, &var3 };> > // traversing using loop> > for> (> int> i = 0; i <3; i++) {> > printf> (> 'Value of var%d: %d Address: %p
'> , i + 1, *ptr_arr[i], ptr_arr[i]);> > }> > return> 0;> }> |
Ausgabe
Value of var1: 10 Address: 0x7fff1ac82484 Value of var2: 20 Address: 0x7fff1ac82488 Value of var3: 30 Address: 0x7fff1ac8248c
Erläuterung:
Wie im obigen Beispiel gezeigt, ist jedes Element des Arrays ein Zeiger, der auf eine Ganzzahl zeigt. Wir können auf den Wert dieser Ganzzahlen zugreifen, indem wir zuerst das Array-Element auswählen und es dann dereferenzieren, um den Wert zu erhalten.
Array von Zeigern auf Zeichen
Eine der Hauptanwendungen des Zeiger-Arrays besteht darin, mehrere Zeichenfolgen als Zeiger-Array auf Zeichen zu speichern. Hier ist jeder Zeiger im Array ein Zeichenzeiger, der auf das erste Zeichen der Zeichenfolge zeigt.
Syntax:
char *array_name [array_size];
Anschließend können wir diesen Zeigern einen String beliebiger Länge zuweisen.
Beispiel:
C
char> * arr[5]> > = {> 'gfg'> ,> 'geek'> ,> 'Geek'> ,> 'Geeks'> ,> 'techcodeview.com'> }> |
Diese Methode zum Speichern von Zeichenfolgen bietet den Vorteil des herkömmlichen Zeichenfolgenarrays. Betrachten Sie die folgenden zwei Beispiele:
Beispiel 1:
C
// C Program to print Array of strings without array of pointers> #include> int> main()> {> > char> str[3][10] = {> 'Geek'> ,> 'Geeks'> ,> 'Geekfor'> };> > printf> (> 'String array Elements are:
'> );> > for> (> int> i = 0; i <3; i++) {> > printf> (> '%s
'> , str[i]);> > }> > return> 0;> }> |
Ausgabe
String array Elements are: Geek Geeks Geekfor
Im obigen Programm haben wir die 3 Zeilen und 10 Spalten unseres String-Arrays deklariert. Aufgrund der Vordefinition der Größe des String-Arrays erhöht sich jedoch der Speicherplatzverbrauch des Programms, wenn der Speicher nicht ordnungsgemäß genutzt wird oder ungenutzt bleibt. Versuchen wir nun, dieselben Zeichenfolgen in einem Zeiger-Array zu speichern.
Beispiel 2:
C
// C program to illustrate the use of array of pointers to> // characters> #include> int> main()> {> > char> * arr[3] = {> 'geek'> ,> 'Geeks'> ,> 'Geeksfor'> };> > for> (> int> i = 0; i <3; i++) {> > printf> (> '%s
'> , arr[i]);> > }> > return> 0;> }> |
Ausgabe
geek Geeks Geeksfor
Hier ist der insgesamt verwendete Speicher der Speicher, der zum Speichern der Zeichenfolgen und Zeiger erforderlich ist, ohne dass Leerraum verbleibt, wodurch viel verschwendeter Platz eingespart wird. Wir können dies anhand des unten gezeigten Bildes verstehen.
Der vom Array von Zeigern auf Zeichen eingenommene Platz wird durch durchgezogene grüne Blöcke angezeigt, mit Ausnahme des zum Speichern des Zeigers erforderlichen Speichers, während der durch das Array von Zeichenfolgen eingenommene Platz sowohl durchgezogene als auch hellgrüne Blöcke umfasst.
Array von Zeigern auf verschiedene Typen
Wir können das Array von Zeigern nicht nur für grundlegende Datentypen wie int, char, float usw. definieren, sondern auch für abgeleitete und benutzerdefinierte Datentypen wie Arrays, Strukturen usw. Betrachten wir das folgende Beispiel Wir erstellen ein Array von Zeigern, die auf eine Funktion zum Ausführen der verschiedenen Operationen zeigen.
Beispiel:
C
// C program to illustrate the use of array of pointers to> // function> #include> // some basic arithmetic operations> void> add(> int> a,> int> b) {> > printf> (> 'Sum : %d
'> , a + b);> }> void> subtract(> int> a,> int> b) {> > printf> (> 'Difference : %d
'> , a - b);> }> void> multiply(> int> a,> int> b) {> > printf> (> 'Product : %d
'> , a * b);> }> void> divide(> int> a,> int> b) {> > printf> (> 'Quotient : %d'> , a / b);> }> int> main() {> > int> x = 50, y = 5;> > // array of pointers to function of return type int> > void> (*arr[4])(> int> ,> int> )> > = { &add, &subtract, &multiply, ÷ };> > for> (> int> i = 0; i <4; i++) {> > arr[i](x, y);> > }> > return> 0;> }> |
Ausgabe
Sum : 55 Difference : 45 Product : 250 Quotient : 10
Anwendung eines Arrays von Zeigern
Ein Array von Zeigern ist in vielen Fällen nützlich. Einige dieser Anwendungen sind unten aufgeführt:
- Es wird am häufigsten zum Speichern mehrerer Zeichenfolgen verwendet.
- Es wird auch zur Implementierung von LinkedHashMap in C und auch in der Chaining-Technik zur Kollisionsauflösung beim Hashing verwendet.
- Es wird in Sortieralgorithmen wie der Bucket-Sortierung verwendet.
- Es kann mit jedem Zeigertyp verwendet werden und ist daher nützlich, wenn wir separate Deklarationen mehrerer Entitäten haben und diese an einem einzigen Ort speichern möchten.
Nachteile eines Arrays von Zeigern
Die Reihe von Hinweisen hat auch einige Nachteile und sollte verwendet werden, wenn die Vorteile die Nachteile überwiegen. Einige der Nachteile des Arrays von Zeigern sind:
- Höherer Speicherverbrauch: Ein Array von Zeigern erfordert im Vergleich zu einfachen Arrays mehr Speicher, da zum Speichern von Zeigern zusätzlicher Speicherplatz erforderlich ist. Komplexität: Die Verwendung eines Arrays von Zeigern kann im Vergleich zu einem einfachen Array komplex sein. Anfällig für Fehler: Da wir Zeiger verwenden, sind alle mit Zeigern verbundenen Fehler damit verbunden, sodass wir vorsichtig damit umgehen müssen.
Verwandter Artikel: Zeiger auf ein Array | Array-Zeiger