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 cSortida
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 actualSortida
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ó.
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