logo

Joukko osoittimia C:ssä

C:ssä osoitintaulukko on homogeeninen kokoelma indeksoituja osoitinmuuttujia, jotka ovat viittauksia muistipaikkaan. Sitä käytetään yleensä C-ohjelmoinnissa, kun haluamme osoittaa useita samantyyppisiä muistipaikkoja C-ohjelmassamme. Voimme käyttää tietoja poistamalla siihen viittaavan osoittimen.

Syntaksi:

pointer_type *array_name [array_size];>

Tässä,



    pointer_type: Tietotyyppi, johon osoitin osoittaa. taulukon_nimi: Osoitintaulukon nimi. array_size: Osoitintaulukon koko.

Huomautus: On tärkeää pitää mielessä operaattorin ensisijaisuus ja assosiatiivisuus erityyppisten osoittimien joukossa, koska yksittäinen muutos tarkoittaa aivan eri asiaa. Esimerkiksi *taulukon_nimi sulkeminen tarkoittaa, että taulukon_nimi on osoitin taulukkoon.

Esimerkki:

C




java merkkijonomenetelmät
// 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;> }>

>

>

Lähtö

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

Selitys:

Kuten yllä olevassa esimerkissä näkyy, taulukon jokainen elementti on osoitin, joka osoittaa kokonaislukua. Voimme käyttää näiden kokonaislukujen arvoa valitsemalla ensin taulukon elementti ja poistamalla sen viittaukset arvon saamiseksi.

Joukko osoittimia hahmoon

Yksi osoittimien joukon pääsovelluksista on tallentaa useita merkkijonoja merkkijonoina. Tässä jokainen taulukon osoitin on merkkiosoitin, joka osoittaa merkkijonon ensimmäiseen merkkiin.

Syntaksi:

char *array_name [array_size];>

Sen jälkeen voimme määrittää näille osoittimille minkä tahansa pituisen merkkijonon.

muuntaa merkkijonon int:ksi Javassa

Esimerkki:

C




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

>

>


Tämän merkkijonojen tallennusmenetelmän etuna on perinteinen merkkijono. Harkitse seuraavia kahta esimerkkiä:

Esimerkki 1:

C




sed-komento
// 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;> }>

>

>

Lähtö

String array Elements are: Geek Geeks Geekfor>

Yllä olevassa ohjelmassa olemme ilmoittaneet merkkijonojoukon 3 riviä ja 10 saraketta. Mutta johtuen merkkijonojoukon koon ennalta määrittelystä ohjelman tilankulutus kasvaa, jos muistia ei käytetä kunnolla tai jätetään käyttämättä. Yritetään nyt tallentaa samat merkkijonot osoittimien joukkoon.

Esimerkki 2:

C




iskcon täysi lomake
// 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;> }>

>

>

Lähtö

geek Geeks Geeksfor>

Tässä käytetty kokonaismuisti on muisti, joka tarvitaan merkkijonojen ja osoittimien tallentamiseen jättämättä tyhjää tilaa, mikä säästää paljon hukattua tilaa. Voimme ymmärtää tämän alla olevan kuvan avulla.

merkkijonojen-joukon-muistin esitys

Merkkeihin osoittavien osoittimien joukon käyttämä tila on esitetty tasaisin vihrein lohkoina, lukuun ottamatta osoittimen tallentamiseen tarvittavaa muistia, kun taas merkkijonojen joukon viemä tila sisältää sekä tasaisia ​​että vaaleanvihreitä lohkoja.

Joukko osoittimia eri tyyppeihin

Emme vain voi määritellä osoittimia perustietotyypeille, kuten int, char, float jne., vaan voimme myös määrittää ne johdetuille ja käyttäjän määrittämille tietotyypeille, kuten taulukoille, rakenteille jne. Tarkastellaan seuraavaa esimerkkiä, jossa luomme joukon osoittimia, jotka osoittavat funktioon eri toimintojen suorittamista varten.

Esimerkki:

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

>

javatable

>

Lähtö

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

Soveltaminen Array of Pointers

Joukko osoittimia on hyödyllinen monissa tapauksissa. Jotkut näistä sovelluksista on lueteltu alla:

  • Sitä käytetään yleisimmin useiden merkkijonojen tallentamiseen.
  • Sitä käytetään myös LinkedHashMapin toteuttamiseen C:ssä ja myös Hashingin törmäyksenratkaisun ketjutustekniikassa.
  • Sitä käytetään lajittelualgoritmeissa, kuten ämpärilajittelussa.
  • Sitä voidaan käyttää minkä tahansa osoitintyypin kanssa, joten se on hyödyllinen, kun meillä on erilliset useiden entiteettien ilmoitukset ja haluamme tallentaa ne yhteen paikkaan.

Osoittimien joukon haitat

Osoittimien joukossa on myös kohtuullinen osuus haitoista, ja sitä tulisi käyttää, kun edut painavat haitat. Jotkut osoitinjoukon haitoista ovat:

    Suurempi muistinkulutus: Osoittimien ryhmä vaatii enemmän muistia tavallisiin matriisiin verrattuna, koska osoittimien tallentamiseen tarvitaan lisätilaa. Monimutkaisuus: osoitinjoukko voi olla monimutkainen käyttää verrattuna yksinkertaiseen taulukkoon. Altis bugeille: Kun käytämme osoittimia, kaikki osoittimiin liittyvät virheet tulevat sen mukana, joten meidän on käsiteltävä niitä huolellisesti.

Aiheeseen liittyvä artikkeli: Osoitin taulukkoon | Array Pointer