Matriu de punters en C

Matriu de punters en C

En C, una matriu de punters és una col·lecció homogènia de variables de punter indexades que són referències a una ubicació de memòria. Generalment s'utilitza a la programació en C quan volem apuntar a diverses ubicacions de memòria d'un tipus de dades similar al nostre programa C. Podem accedir a les dades desreferenciant el punter que hi apunta.

Sintaxi:

pointer_type *array_name [array_size]; 

Aquí,



    pointer_type: tipus de dades a les quals apunta el punter. nom_matriu: nom de la matriu de punters. array_size: Mida de la matriu de punters.

Nota: És important tenir en compte la precedència de l'operador i l'associativitat a la matriu de declaracions de punters de tipus diferent, ja que un sol canvi significarà una cosa completament diferent. Per exemple, incloure *array_name entre parèntesis significarà que array_name és un punter a una matriu.

Exemple:

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

Sortida

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

Explicació:

Com es mostra a l'exemple anterior, cada element de la matriu és un punter que apunta a un nombre enter. Podem accedir al valor d'aquests nombres enters seleccionant primer l'element de la matriu i després desreferenciant-lo per obtenir el valor.

Matriu de punters al personatge

Una de les principals aplicacions de la matriu de punters és emmagatzemar diverses cadenes com una matriu de punters a caràcters. Aquí, cada punter de la matriu és un punter de caràcter que apunta al primer caràcter de la cadena.

Sintaxi:

char *array_name [array_size]; 

Després d'això, podem assignar una cadena de qualsevol longitud a aquests punters.

Exemple:

C




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


Aquest mètode d'emmagatzematge de cadenes té l'avantatge de la matriu tradicional de cadenes. Considereu els dos exemples següents:

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

Sortida

String array Elements are: Geek Geeks Geekfor 

Al programa anterior, hem declarat les 3 files i 10 columnes de la nostra matriu de cadenes. Però a causa de la predefinició de la mida de la matriu de cadenes, el consum d'espai del programa augmenta si la memòria no s'utilitza correctament o no s'utilitza. Ara intentem emmagatzemar les mateixes cadenes en una matriu de punters.

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

Sortida

geek Geeks Geeksfor 

Aquí, la memòria total utilitzada és la memòria necessària per emmagatzemar les cadenes i els punters sense deixar cap espai buit, per tant, estalviant molt d'espai perdut. Ho podem entendre amb la imatge que es mostra a continuació.

representació-de-memòria-d

L'espai ocupat per la matriu de punters a caràcters es mostra amb blocs verds sòlids, excloent la memòria necessària per emmagatzemar el punter, mentre que l'espai ocupat per la matriu de cadenes inclou blocs de color verd clar i sòlids.

Matriu de punters a diferents tipus

No només podem definir la matriu de punters per a tipus de dades bàsics com int, char, float, etc., sinó que també podem definir-los per a tipus de dades derivades i definides per l'usuari, com ara matrius, estructures, etc. Considerem l'exemple següent on creem una matriu de punters que apunten a una funció per realitzar les diferents operacions.

Exemple:

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

Sortida

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

Aplicació de la matriu de punters

Una sèrie de punters és útil en una àmplia gamma de casos. Algunes d'aquestes aplicacions s'enumeren a continuació:

  • S'utilitza més habitualment per emmagatzemar diverses cadenes.
  • També s'utilitza per implementar LinkedHashMap en C i també en la tècnica d'encadenament de resolució de col·lisions en Hashing.
  • S'utilitza en algorismes d'ordenació com l'ordenació de cubs.
  • Es pot utilitzar amb qualsevol tipus de punter, de manera que és útil quan tenim declaracions separades de diverses entitats i les volem emmagatzemar en un sol lloc.

Desavantatges de la matriu de punters

La matriu d'indicadors també té la seva bona part d'inconvenients i s'ha d'utilitzar quan els avantatges superen els desavantatges. Alguns dels inconvenients de la matriu de punters són:

    Major consum de memòria: una matriu de punters requereix més memòria en comparació amb les matrius simples a causa de l'espai addicional necessari per emmagatzemar els punters. Complexitat: una matriu de punters pot ser complexa d'utilitzar en comparació amb una matriu simple. Propens a errors: a mesura que utilitzem punters, tots els errors associats amb els punters vénen amb això, per la qual cosa els hem de manejar amb cura.

Article relacionat: Punter a una matriu | Apuntador de matriu



Articles Més Populars

Categoria

Articles D'Interès