Rādītāju masīvs C
Programmā C rādītāja masīvs ir viendabīga indeksētu rādītāju mainīgo kolekcija, kas ir atsauces uz atmiņas vietu. To parasti izmanto C programmēšanā, ja mēs vēlamies norādīt uz vairākām līdzīga datu tipa atmiņas vietām mūsu C programmā. Mēs varam piekļūt datiem, atceļot atsauci uz rādītāju, kas norāda uz tiem.
Sintakse:
pointer_type *array_name [array_size];
Šeit,
- pointer_type: datu tips, uz kuriem norāda rādītājs. masīva_nosaukums: rādītāju masīva nosaukums. array_size: rādītāju masīva lielums.
Piezīme: Ir svarīgi paturēt prātā operatora prioritāti un asociativitāti dažāda veida rādītāju deklarāciju masīvā, jo viena izmaiņa nozīmēs pavisam citu. Piemēram, iekavās pievienojot *masīva_nosaukums, tas nozīmēs, ka masīva_nosaukums ir rādītājs uz masīvu.
Piemērs:
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;> }> |
Izvade
Value of var1: 10 Address: 0x7fff1ac82484 Value of var2: 20 Address: 0x7fff1ac82488 Value of var3: 30 Address: 0x7fff1ac8248c
Paskaidrojums:
Kā parādīts iepriekš minētajā piemērā, katrs masīva elements ir rādītājs, kas norāda uz veselu skaitli. Mēs varam piekļūt šo veselo skaitļu vērtībai, vispirms atlasot masīva elementu un pēc tam atceļot atsauci, lai iegūtu vērtību.
Norādes uz rakstzīmi
Viens no galvenajiem rādītāju masīva lietojumiem ir saglabāt vairākas virknes kā norādes uz rakstzīmēm masīvu. Šeit katrs masīva rādītājs ir rakstzīmju rādītājs, kas norāda uz virknes pirmo rakstzīmi.
Sintakse:
char *array_name [array_size];
Pēc tam šiem rādītājiem mēs varam piešķirt jebkura garuma virkni.
Piemērs:
C
char> * arr[5]> > = {> 'gfg'> ,> 'geek'> ,> 'Geek'> ,> 'Geeks'> ,> 'techcodeview.com'> }> |
Šai stīgu glabāšanas metodei ir tradicionālā virkņu masīva priekšrocība. Apsveriet šādus divus piemērus:
1. piemērs:
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;> }> |
Izvade
String array Elements are: Geek Geeks Geekfor
Iepriekš minētajā programmā mēs esam deklarējuši mūsu virkņu masīva 3 rindas un 10 kolonnas. Taču, iepriekš definējot virkņu masīva lielumu, programmas vietas patēriņš palielinās, ja atmiņa netiek izmantota pareizi vai netiek izmantota. Tagad mēģināsim saglabāt tās pašas virknes rādītāju masīvā.
2. piemērs:
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;> }> |
Izvade
geek Geeks Geeksfor
Šeit kopējā izmantotā atmiņa ir atmiņa, kas nepieciešama virkņu un rādītāju glabāšanai, neatstājot tukšu vietu, tādējādi ietaupot daudz izšķērdētas vietas. Mēs to varam saprast, izmantojot tālāk redzamo attēlu.
Vieta, ko aizņem norādes uz rakstzīmēm, tiek parādīta ar vienkrāsainiem zaļiem blokiem, izņemot atmiņu, kas nepieciešama rādītāja glabāšanai, savukārt virkņu masīva aizņemtā vieta ietver gan vienkrāsainus, gan gaiši zaļus blokus.
Norādes uz dažādiem veidiem
Mēs varam ne tikai definēt rādītāju masīvu pamata datu tipiem, piemēram, int, char, float utt., bet mēs varam arī definēt tos atvasinātiem un lietotāja definētiem datu tipiem, piemēram, masīviem, struktūrām utt. Apskatīsim tālāk sniegto piemēru, kur mēs izveidojam rādītāju masīvu, kas norāda uz funkciju dažādu darbību veikšanai.
Piemērs:
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;> }> |
Izvade
Sum : 55 Difference : 45 Product : 250 Quotient : 10
Rādītāju masīva pielietojums
Norādītāju masīvs ir noderīgs daudzos gadījumos. Dažas no šīm lietojumprogrammām ir norādītas tālāk:
- To visbiežāk izmanto vairāku virkņu glabāšanai.
- To izmanto arī, lai ieviestu LinkedHashMap programmā C, kā arī sadursmju risināšanas ķēdes tehnikā jaukšanā.
- To izmanto šķirošanas algoritmos, piemēram, kausa kārtošanā.
- To var izmantot ar jebkuru rādītāja veidu, tāpēc tas ir noderīgi, ja mums ir atsevišķas vairāku entītiju deklarācijas un mēs vēlamies tās saglabāt vienā vietā.
Rādītāju masīva trūkumi
Norāžu masīvam ir arī savs trūkums, un tas ir jāizmanto, ja priekšrocības atsver trūkumus. Daži no rādītāju masīva trūkumiem ir:
- Lielāks atmiņas patēriņš: rādītāju masīvam ir nepieciešams vairāk atmiņas, salīdzinot ar vienkāršiem masīviem, jo rādītāju glabāšanai ir nepieciešama papildu vieta. Sarežģītība: norādes masīva lietošana var būt sarežģīta, salīdzinot ar vienkāršu masīvu. Ar noslieci uz kļūdām: tā kā mēs izmantojam norādes, visas ar norādes saistītās kļūdas nāk ar tām, tāpēc mums tās rūpīgi jārīkojas.
Saistīts raksts: Rādītājs uz masīvu | Masīva rādītājs