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.
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;
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.
Operators | Priekšroka | Asociativitāte |
---|---|---|
(), [] | 1 | No kreisās uz labo |
*, identifikators | 2 | No labās uz kreiso |
Datu tips | 3 | - |
Š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.