Array af pointere i C
I C er et pointer-array en homogen samling af indekserede pointervariabler, der er referencer til en hukommelsesplacering. Det bruges generelt i C-programmering, når vi ønsker at pege på flere hukommelsesplaceringer af en lignende datatype i vores C-program. Vi kan få adgang til dataene ved at dereferere den markør, der peger på dem.
Syntaks:
pointer_type *array_name [array_size];
Her,
- pointer_type: Type af data, som markøren peger på. array_name: Navn på arrayet af pointere. array_size: Størrelsen af arrayet af pointere.
Bemærk: Det er vigtigt at huske på operatørens forrang og associativitet i rækken af pointer-erklæringer af forskellig type, da en enkelt ændring vil betyde en helt anden ting. Hvis du for eksempel omslutter *array_name i parentes, vil det betyde, at array_name er en pointer til en matrix.
Eksempel:
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;> }> |
Produktion
Value of var1: 10 Address: 0x7fff1ac82484 Value of var2: 20 Address: 0x7fff1ac82488 Value of var3: 30 Address: 0x7fff1ac8248c
Forklaring:
Som vist i ovenstående eksempel er hvert element i arrayet en pointer, der peger på et heltal. Vi kan få adgang til værdien af disse heltal ved først at vælge array-elementet og derefter dereferere det for at få værdien.
Array af pointere til karakter
En af de vigtigste anvendelser af arrayet af pointere er at gemme flere strenge som en række pointere til tegn. Her er hver pointer i arrayet en tegnmarkør, der peger på det første tegn i strengen.
Syntaks:
char *array_name [array_size];
Derefter kan vi tildele en streng af enhver længde til disse pointere.
Eksempel:
C
char> * arr[5]> > = {> 'gfg'> ,> 'geek'> ,> 'Geek'> ,> 'Geeks'> ,> 'techcodeview.com'> }> |
Denne metode til lagring af strenge har fordelen af den traditionelle række af strenge. Overvej følgende to eksempler:
Eksempel 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;> }> |
Produktion
String array Elements are: Geek Geeks Geekfor
I ovenstående program har vi erklæret de 3 rækker og 10 kolonner i vores række af strenge. Men på grund af foruddefinering af størrelsen af rækken af strenge, øges pladsforbruget af programmet, hvis hukommelsen ikke bruges korrekt eller efterlades ubrugt. Lad os nu prøve at gemme de samme strenge i en række pointere.
Eksempel 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;> }> |
Produktion
geek Geeks Geeksfor
Her er den samlede hukommelse, der bruges, den hukommelse, der kræves til lagring af strenge og pointere uden at efterlade noget tomt rum, hvilket sparer en masse spildplads. Vi kan forstå dette ved at bruge billedet vist nedenfor.
Den plads, der optages af arrayet af pointere til tegn, vises af faste grønne blokke, eksklusive den hukommelse, der kræves til at lagre markøren, mens pladsen optaget af arrayet af strenge omfatter både solide og lysegrønne blokke.
Vifte af pointer til forskellige typer
Vi kan ikke kun definere arrayet af pointere for grundlæggende datatyper som int, char, float osv., men vi kan også definere dem for afledte og brugerdefinerede datatyper såsom arrays, strukturer osv. Lad os overveje nedenstående eksempel, hvor vi opretter en række pointere, der peger på en funktion til at udføre de forskellige operationer.
Eksempel:
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;> }> |
Produktion
Sum : 55 Difference : 45 Product : 250 Quotient : 10
Anvendelse af Array of Pointers
En række pointer er nyttige i en lang række tilfælde. Nogle af disse applikationer er anført nedenfor:
- Det bruges mest til at gemme flere strenge.
- Det bruges også til at implementere LinkedHashMap i C og også i Chaining-teknikken til kollisionsløsning i Hashing.
- Det bruges i sorteringsalgoritmer som spandsortering.
- Det kan bruges med enhver pointertype, så det er nyttigt, når vi har separate erklæringer af flere enheder, og vi ønsker at gemme dem på et enkelt sted.
Ulemper ved Array of Pointers
Rækken af pointere har også sin rimelige andel af ulemper og bør bruges, når fordelene opvejer ulemperne. Nogle af ulemperne ved rækken af pointere er:
- Højere hukommelsesforbrug: Et array af pointere kræver mere hukommelse sammenlignet med almindelige arrays på grund af den ekstra plads, der kræves til at gemme pointere. Kompleksitet: Et array af pointere kan være komplekst at bruge sammenlignet med et simpelt array. Tilbøjelig til fejl: Når vi bruger pointere, kommer alle fejl forbundet med pointere med, så vi skal håndtere dem omhyggeligt.
Relateret artikel: Pointer til et array | Array Pointer