logo

C Rādītāji

C valodas rādītājs ir mainīgais, kas saglabā cita mainīgā adresi. Šis mainīgais var būt int, char, masīva, funkcijas vai jebkura cita rādītāja tipa. Rādītāja lielums ir atkarīgs no arhitektūras. Tomēr 32 bitu arhitektūrā rādītāja izmērs ir 2 baiti.

Apsveriet šo piemēru, lai definētu rādītāju, kas saglabā vesela skaitļa adresi.

 int n = 10; int* p = &n; // Variable p of type pointer is pointing to the address of the variable n of type integer. 

Rādītāja deklarēšana

Rādītāju c valodā var deklarēt, izmantojot * (zvaigznītes simbols). To sauc arī par netiešo rādītāju, ko izmanto, lai atsauktu rādītāju.

 int *a;//pointer to int char *c;//pointer to char 

Rādītāja piemērs

Tālāk ir sniegts rādītāja izmantošanas piemērs adreses un vērtības drukāšanai.

rādītāja piemērs

Kā redzams iepriekšējā attēlā, rādītāja mainīgais saglabā skaitļa mainīgā adresi, t.i., fff4. Skaitļa mainīgā vērtība ir 50. Bet rādītāja mainīgā p adrese ir aaa3.

Ar * ( netiešais operators ), mēs varam izdrukāt rādītāja mainīgā p vērtību.

lateksa matrica

Apskatīsim rādītāja piemēru, kā paskaidrots iepriekš attēlā.

 #include int main(){ int number=50; int *p; p=&number;//stores the address of number variable printf('Address of p variable is %x 
',p); // p contains the address of the number therefore printing p gives the address of number. printf('Value of p variable is %d 
',*p); // As we know that * is used to dereference a pointer therefore if we print *p, we will get the value stored at the address contained by p. return 0; } 

Izvade

 Address of number variable is fff4 Address of p variable is fff4 Value of p variable is 50 

Rādītājs uz masīvu

 int arr[10]; int *p[10]=&arr; // Variable p of type pointer is pointing to the address of an integer array arr. 

Rādītājs uz funkciju

 void show (int); void(*p)(int) = &display; // Pointer p is pointing to the address of a function 

Rādītājs uz struktūru

 struct st { int i; float f; }ref; struct st *p = &ref; 
c norādes

Rādītāja priekšrocība

1) Rādītājs samazina kodu un uzlabo veiktspēju , to izmanto, lai izgūtu virknes, kokus utt., un to izmanto ar masīviem, struktūrām un funkcijām.

2) Mēs varam atgriež vairākas vērtības no funkcijas izmantojot rādītāju.

3) Tas padara jūs spējīgu piekļūt jebkurai atmiņas vietai datora atmiņā.

Rādītāja lietošana

Ir daudz norādes lietojumu c valodā.

1) Dinamiskā atmiņas piešķiršana

C valodā mēs varam dinamiski piešķirt atmiņu, izmantojot malloc () un calloc () funkcijas, kur tiek izmantots rādītājs.

klēpjdatora ievietošanas atslēga

2) Masīvi, funkcijas un struktūras

Rādītāji c valodā tiek plaši izmantoti masīvos, funkcijās un struktūrās. Tas samazina kodu un uzlabo veiktspēju.

(&) operatora adrese

Operatora “&” adrese atgriež mainīgā lieluma adresi. Taču mums ir jāizmanto %u, lai parādītu mainīgā adresi.

 #include int main(){ int number=50; printf('value of number is %d, address of number is %u',number,&number); return 0; } 

Izvade

 value of number is 50, address of number is fff4 

NULL rādītājs

Rādītājs, kuram nav piešķirta nekāda vērtība, bet NULL, ir pazīstams kā NULL rādītājs. Ja deklarēšanas laikā rādītājā nav jānorāda neviena adrese, varat piešķirt NULL vērtību. Tas nodrošinās labāku pieeju.

 int *p=NULL; 

Lielākajā daļā bibliotēku rādītāja vērtība ir 0 (nulle).

Rādītāja programma, lai apmainītu divus skaitļus, neizmantojot 3. mainīgo.

 #include int main(){ int a=10,b=20,*p1=&a,*p2=&b; printf('Before swap: *p1=%d *p2=%d',*p1,*p2); *p1=*p1+*p2; *p2=*p1-*p2; *p1=*p1-*p2; printf('
After swap: *p1=%d *p2=%d',*p1,*p2); return 0; } 

Izvade

izņēmumu apstrādes java
 Before swap: *p1=10 *p2=20 After swap: *p1=20 *p2=10 

Sarežģītu norāžu lasīšana

Ir vairākas lietas, kas jāņem vērā, lasot sarežģītās norādes programmā C. Apskatīsim to operatoru prioritāti un asociativitāti, kas tiek izmantoti attiecībā uz rādītājiem.

OperatorsPriekšrokaAsociativitāte
(), []1No kreisās uz labo
*, identifikators2No labās uz kreiso
Datu tips3-

Šeit mums jāņem vērā,

  • (): Šis operators ir iekavu operators, ko izmanto, lai deklarētu un definētu funkciju.
  • []: šis operators ir masīva apakšindeksa operators
  • * : Šis operators ir rādītāja operators.
  • Identifikators: tas ir rādītāja nosaukums. Tam vienmēr tiks piešķirta prioritāte.
  • Datu tips: Datu tips ir mainīgā tips, uz kuru rādītājs ir paredzēts. Tas ietver arī modifikatoru, piemēram, signed int, long utt.).

Kā nolasīt rādītāju: int (*p)[10].

Lai nolasītu rādītāju, mums ir jāredz, ka () un [] ir vienāda prioritāte. Tāpēc šeit ir jāņem vērā to asociativitāte. Asociativitāte ir no kreisās puses uz labo pusi, tāpēc prioritāte ir ().

Iekavās () rādītāja operatoram * un rādītāja nosaukumam (identifikatoram) p ir vienāda prioritāte. Tāpēc šeit ir jāņem vērā to asociativitāte, kas ir no labās uz kreiso pusi, tāpēc prioritāte ir p, bet otrā prioritāte ir *.

Piešķiriet 3. prioritāti [], jo datu tipam ir pēdējā prioritāte. Tāpēc rādītājs izskatīsies šādi.

  • ogle -> 4
  • * -> 2
  • p -> 1
  • [10] -> 3

Rādītājs tiks nolasīts kā p ir rādītājs uz veselu skaitļu masīvu, kura izmērs ir 10.

Linux mainīt direktorija nosaukumu

Piemērs

Kā lasīt tālāk norādīto rādītāju?

 int (*p)(int (*)[2], int (*)void)) 

Paskaidrojums

Šis rādītājs tiks nolasīts, jo p ir rādītājs uz tādu funkciju, kura pieņem pirmo parametru kā rādītāju uz viendimensijas veselu skaitļu masīvu ar lielumu divi un otro parametru kā rādītāju uz funkciju, kuras parametrs ir nederīgs un atgriešanas veids ir vesels skaitlis.