logo

Array van aanwijzingen in C

In C is een pointerarray een homogene verzameling geïndexeerde pointervariabelen die verwijzingen zijn naar een geheugenlocatie. Het wordt over het algemeen gebruikt bij C-programmering wanneer we naar meerdere geheugenlocaties van een vergelijkbaar gegevenstype in ons C-programma willen verwijzen. We kunnen toegang krijgen tot de gegevens door de verwijzing naar de aanwijzer te derefereren.

Syntaxis:



pointer_type *array_name [array_size];>

Hier,

    pointer_type: Type gegevens waarnaar de aanwijzer verwijst. array_name: Naam van de array met pointers. array_size: Grootte van de array met pointers.

Opmerking: Het is belangrijk om de operatorprioriteit en associativiteit in gedachten te houden in de reeks pointersdeclaraties van verschillende typen, aangezien een enkele wijziging een heel ander ding zal betekenen. Als u bijvoorbeeld *arraynaam tussen haakjes plaatst, betekent dit dat arraynaam een ​​verwijzing naar een array is.

Voorbeeld:



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;> }>

>

>

Uitvoer

Value of var1: 10 Address: 0x7fff1ac82484 Value of var2: 20 Address: 0x7fff1ac82488 Value of var3: 30 Address: 0x7fff1ac8248c>

Uitleg:

Zoals in het bovenstaande voorbeeld wordt getoond, is elk element van de array een pointer die naar een geheel getal wijst. We hebben toegang tot de waarde van deze gehele getallen door eerst het array-element te selecteren en er vervolgens de verwijzingen naar te derefereren om de waarde te verkrijgen.

Reeks verwijzingen naar karakter

Een van de belangrijkste toepassingen van de array van pointers is het opslaan van meerdere strings als een array van pointers naar karakters. Hier is elke pointer in de array een karakterpointer die naar het eerste karakter van de string verwijst.

int naar string

Syntaxis:

char *array_name [array_size];>

Daarna kunnen we aan deze pointers een string van elke lengte toewijzen.

Voorbeeld:

C




char>* arr[5]> >= {>'gfg'>,>'geek'>,>'Geek'>,>'Geeks'>,>'techcodeview.com'> }>

>

>


Deze methode voor het opslaan van strings heeft het voordeel van de traditionele reeks strings. Beschouw de volgende twee voorbeelden:

hritik roshan-leeftijd

Voorbeeld 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;> }>

mier versus maven
>

>

Uitvoer

String array Elements are: Geek Geeks Geekfor>

In het bovenstaande programma hebben we de 3 rijen en 10 kolommen van onze reeks strings gedeclareerd. Maar omdat de grootte van de reeks strings vooraf wordt gedefinieerd, neemt het ruimtegebruik van het programma toe als het geheugen niet goed wordt gebruikt of ongebruikt blijft. Laten we nu proberen dezelfde strings op te slaan in een array van pointers.

Voorbeeld 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;> }>

>

>

Uitvoer

geek Geeks Geeksfor>

Hier is het totale gebruikte geheugen het geheugen dat nodig is voor het opslaan van de strings en pointers zonder dat er lege ruimte overblijft, waardoor veel verspilde ruimte wordt bespaard. We kunnen dit begrijpen aan de hand van de onderstaande afbeelding.

geheugenrepresentatie van een array van strings

De ruimte die wordt ingenomen door de reeks verwijzingen naar tekens wordt weergegeven door ononderbroken groene blokken, exclusief het geheugen dat nodig is voor het opslaan van de aanwijzer, terwijl de ruimte die wordt ingenomen door de reeks strings zowel ononderbroken als lichtgroene blokken bevat.

Reeks verwijzingen naar verschillende typen

We kunnen niet alleen de reeks pointers definiëren voor basisgegevenstypen zoals int, char, float, enz., maar we kunnen ze ook definiëren voor afgeleide en door de gebruiker gedefinieerde gegevenstypen zoals arrays, structuren, enz. Laten we het onderstaande voorbeeld bekijken, waarbij we creëren een reeks verwijzingen die naar een functie verwijzen voor het uitvoeren van de verschillende bewerkingen.

Voorbeeld:

C


kern Java-interviewvragen



// 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;> }>

>

>

Uitvoer

Sum : 55 Difference : 45 Product : 250 Quotient : 10>

Toepassing van een reeks pointers

Een reeks verwijzingen is nuttig in een groot aantal gevallen. Enkele van deze toepassingen vindt u hieronder:

  • Het wordt meestal gebruikt om meerdere strings op te slaan.
  • Het wordt ook gebruikt om LinkedHashMap in C te implementeren en ook in de Chaining-techniek voor het oplossen van botsingen in Hashing.
  • Het wordt gebruikt in sorteeralgoritmen zoals bucket sort.
  • Het kan met elk pointertype worden gebruikt, dus het is handig als we afzonderlijke declaraties van meerdere entiteiten hebben en we deze op één plaats willen opslaan.

Nadelen van een reeks pointers

De reeks verwijzingen heeft ook een groot aantal nadelen en moet worden gebruikt wanneer de voordelen groter zijn dan de nadelen. Enkele nadelen van de reeks pointers zijn:

    Hoger geheugenverbruik: Een array van pointers vereist meer geheugen in vergelijking met gewone arrays vanwege de extra ruimte die nodig is om pointers op te slaan. Complexiteit: Een array van pointers kan complex zijn in het gebruik in vergelijking met een eenvoudige array. Gevoelig voor bugs: Omdat we pointers gebruiken, komen alle bugs die verband houden met pointers daarmee gepaard, dus we moeten er zorgvuldig mee omgaan.

Gerelateerd artikel: Verwijzing naar een array | Array-aanwijzer