logo

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:



imatge com a fons en css

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.

lògica proposicional

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

>

>

aleatòria al c
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;> }>

>

>

java obtenir l'hora actual
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'una-matriu-de-cadenes

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


Linux canvia el nom del directori



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