En rekke pekere i C
I C er en pekermatrise en homogen samling av indekserte pekervariabler som er referanser til en minneplassering. Det brukes vanligvis i C-programmering når vi ønsker å peke på flere minneplasseringer av en lignende datatype i vårt C-program. Vi kan få tilgang til dataene ved å referere til pekeren som peker på den.
Syntaks:
pointer_type *array_name [array_size];
Her,
- pointer_type: Type data pekeren peker på. array_name: Navn på arrayen av pekere. array_size: Størrelsen på utvalget av pekere.
Merk: Det er viktig å huske på operatørens forrang og assosiativitet i utvalget av pekereerklæringer av forskjellig type, da en enkelt endring vil bety en helt annen ting. For eksempel vil det å omslutte *array_name i parentes bety at array_name er en peker til en matrise.
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;> }> |
Produksjon
Value of var1: 10 Address: 0x7fff1ac82484 Value of var2: 20 Address: 0x7fff1ac82488 Value of var3: 30 Address: 0x7fff1ac8248c
Forklaring:
Som vist i eksemplet ovenfor, er hvert element i matrisen en peker som peker til et heltall. Vi kan få tilgang til verdien av disse heltallene ved først å velge array-elementet og deretter frarefere det for å få verdien.
En rekke pekepinner til karakter
En av hovedapplikasjonene til rekken av pekere er å lagre flere strenger som en rekke pekere til tegn. Her er hver peker i matrisen en tegnpeker som peker til det første tegnet i strengen.
Syntaks:
char *array_name [array_size];
Etter det kan vi tilordne en streng av hvilken som helst lengde til disse pekerne.
Eksempel:
C
char> * arr[5]> > = {> 'gfg'> ,> 'geek'> ,> 'Geek'> ,> 'Geeks'> ,> 'techcodeview.com'> }> |
Denne metoden for å lagre strenger har fordelen av den tradisjonelle rekken av strenger. Tenk på 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;> }> |
Produksjon
String array Elements are: Geek Geeks Geekfor
I programmet ovenfor har vi deklarert de 3 radene og 10 kolonnene i vår rekke strenger. Men på grunn av forhåndsdefinering av størrelsen på rekken av strenger, øker plassforbruket til programmet hvis minnet ikke brukes riktig eller står ubrukt. La oss nå prøve å lagre de samme strengene i en rekke pekere.
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;> }> |
Produksjon
geek Geeks Geeksfor
Her er det totale minnet som brukes minnet som kreves for å lagre strengene og pekerne uten å etterlate noe tomt, og dermed spare mye bortkastet plass. Vi kan forstå dette ved å bruke bildet vist nedenfor.
Plassen som okkuperes av rekken av pekere til tegn, vises av solide grønne blokker unntatt minnet som kreves for å lagre pekeren, mens plassen som okkuperes av rekken av strenger inkluderer både solide og lysegrønne blokker.
En rekke tips til forskjellige typer
Ikke bare kan vi definere matrisen av pekere for grunnleggende datatyper som int, char, float, osv., men vi kan også definere dem for avledede og brukerdefinerte datatyper som matriser, strukturer osv. La oss se på eksemplet nedenfor hvor vi lager en rekke pekere som peker på en funksjon for å utføre de forskjellige operasjonene.
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;> }> |
Produksjon
Sum : 55 Difference : 45 Product : 250 Quotient : 10
Anvendelse av Array of Pointers
En rekke pekere er nyttige i et bredt spekter av tilfeller. Noen av disse programmene er oppført nedenfor:
- Det er mest brukt til å lagre flere strenger.
- Den brukes også til å implementere LinkedHashMap i C og også i Chaining-teknikken for kollisjonsløsning i Hashing.
- Den brukes i sorteringsalgoritmer som bøttesortering.
- Den kan brukes med hvilken som helst pekertype, så den er nyttig når vi har separate deklarasjoner av flere enheter og vi ønsker å lagre dem på ett enkelt sted.
Ulemper med Array of Pointers
Utvalget av pekere har også sin rimelige del av ulemper og bør brukes når fordelene oppveier ulempene. Noen av ulempene med utvalget av pekere er:
- Høyere minneforbruk: En rekke pekere krever mer minne sammenlignet med vanlige arrays på grunn av den ekstra plassen som kreves for å lagre pekere. Kompleksitet: En rekke pekere kan være komplisert å bruke sammenlignet med en enkel matrise. Utsatt for feil: Når vi bruker pekere, kommer alle feilene knyttet til pekere med det, så vi må håndtere dem forsiktig.
Relatert artikkel: Peker til en matrise | Array Pointer