Rodyklės masyvas C
C kalboje rodyklės masyvas yra vienalytis indeksuotų rodyklės kintamųjų, kurie yra nuorodos į atminties vietą, rinkinys. Paprastai jis naudojamas programuojant C, kai norime nurodyti kelias panašaus duomenų tipo atminties vietas mūsų C programoje. Duomenis galime pasiekti panaikinę nuorodą į juos nurodantį žymeklį.
Sintaksė:
pointer_type *array_name [array_size];
Čia
- pointer_type: duomenų tipas, į kurį nukreipia žymeklis. masyvo_pavadinimas: rodyklių masyvo pavadinimas. array_size: rodyklių masyvo dydis.
Pastaba: Svarbu nepamiršti operatoriaus pirmumo ir asociatyvumo skirtingo tipo rodyklių deklaracijų masyve, nes vienas pakeitimas reikš visiškai skirtingą dalyką. Pavyzdžiui, skliausteliuose įtraukus *masyvo_pavadinimas reikš, kad masyvo_pavadinimas yra masyvo rodyklė.
Pavyzdys:
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;> }> |
Išvestis
Value of var1: 10 Address: 0x7fff1ac82484 Value of var2: 20 Address: 0x7fff1ac82488 Value of var3: 30 Address: 0x7fff1ac8248c
Paaiškinimas:
Kaip parodyta aukščiau pateiktame pavyzdyje, kiekvienas masyvo elementas yra rodyklė, nukreipianti į sveikąjį skaičių. Šių sveikųjų skaičių reikšmę galime pasiekti pirmiausia pasirinkę masyvo elementą ir atšaukę jo nuorodą, kad gautume vertę.
Rodyklės į charakterį masyvas
Viena iš pagrindinių rodyklių masyvo pritaikymų yra saugoti kelias eilutes kaip nuorodų į simbolius masyvą. Čia kiekvienas masyvo žymeklis yra simbolių rodyklė, nukreipianti į pirmąjį eilutės simbolį.
Sintaksė:
char *array_name [array_size];
Po to šioms rodyklėms galime priskirti bet kokio ilgio eilutę.
Pavyzdys:
C
char> * arr[5]> > = {> 'gfg'> ,> 'geek'> ,> 'Geek'> ,> 'Geeks'> ,> 'techcodeview.com'> }> |
Šis stygų saugojimo būdas turi tradicinio eilučių masyvo pranašumą. Apsvarstykite šiuos du pavyzdžius:
1 pavyzdys:
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;> }> |
Išvestis
String array Elements are: Geek Geeks Geekfor
Aukščiau pateiktoje programoje paskelbėme 3 eilučių ir 10 stulpelių eilučių masyvo. Tačiau iš anksto nustačius eilučių masyvo dydį, programos vietos suvartojimas padidėja, jei atmintis nėra tinkamai naudojama arba nenaudojama. Dabar pabandykime išsaugoti tas pačias eilutes rodyklių masyve.
2 pavyzdys:
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;> }> |
Išvestis
geek Geeks Geeksfor
Čia visa naudojama atmintis yra atmintis, reikalinga eilutėms ir rodyklėms saugoti nepaliekant tuščios vietos, todėl sutaupoma daug išeikvotos vietos. Tai galime suprasti naudodami toliau pateiktą paveikslėlį.
Vieta, kurią užima simbolių rodyklių masyvo, rodoma ištisiniais žaliais blokais, išskyrus atmintį, reikalingą žymekliui saugoti, o eilučių masyvo užimama vieta apima ir vientisus, ir šviesiai žalius blokus.
Rodyklės į skirtingus tipus
Galime ne tik apibrėžti pagrindinių duomenų tipų, pvz., int, char, float ir kt., rodyklių masyvą, bet taip pat galime apibrėžti juos išvestiniams ir vartotojo apibrėžtiems duomenų tipams, pvz., masyvams, struktūroms ir kt. Panagrinėkime toliau pateiktą pavyzdį. sukuriame rodyklių masyvą, nurodantį funkciją, skirtą įvairioms operacijoms atlikti.
Pavyzdys:
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;> }> |
Išvestis
Sum : 55 Difference : 45 Product : 250 Quotient : 10
Rodyklės masyvo taikymas
Rodyklės yra naudingos įvairiais atvejais. Kai kurios iš šių programų yra išvardytos žemiau:
- Jis dažniausiai naudojamas kelioms eilutėms saugoti.
- Jis taip pat naudojamas „LinkedHashMap“ diegimui C, taip pat „chaining“ susidūrimo sprendimo technikoje maišos sistemoje.
- Jis naudojamas rūšiavimo algoritmuose, pavyzdžiui, rūšiuojant kibirą.
- Jis gali būti naudojamas su bet kokio tipo žymekliu, todėl naudinga, kai turime atskiras kelių objektų deklaracijas ir norime jas saugoti vienoje vietoje.
Rodyklės masyvo trūkumai
Nuorodų masyvas taip pat turi nemažai trūkumų ir turėtų būti naudojamas, kai pranašumai nusveria trūkumus. Kai kurie rodyklių masyvo trūkumai yra šie:
- Didesnis atminties suvartojimas: rodyklių masyvai reikalauja daugiau atminties, palyginti su paprastais masyvais, nes rodyklėms saugoti reikia papildomos vietos. Sudėtingumas: rodyklių masyvą gali būti sudėtinga naudoti, palyginti su paprastu masyvu. Linkę į klaidas: kai naudojame nuorodas, visos su rodyklėmis susijusios klaidos ateina kartu su ja, todėl turime su jais elgtis atsargiai.
Susijęs straipsnis: Rodyklė į masyvą | Masyvo rodyklė