logo

C Kazalci

Kazalec v jeziku C je spremenljivka, ki shrani naslov druge spremenljivke. Ta spremenljivka je lahko tipa int, char, array, function ali katerega koli drugega kazalca. Velikost kazalca je odvisna od arhitekture. Vendar pa je v 32-bitni arhitekturi velikost kazalca 2 bajta.

Razmislite o naslednjem primeru za definiranje kazalca, ki shrani naslov celega števila.

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

Deklaracija kazalca

Kazalec v jeziku c je mogoče deklarirati z uporabo * (simbol zvezdice). Znan je tudi kot posredni kazalec, ki se uporablja za dereferenciranje kazalca.

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

Primer kazalca

Spodaj je podan primer uporabe kazalcev za izpis naslova in vrednosti.

primer kazalca

Kot lahko vidite na zgornji sliki, spremenljivka kazalca shrani naslov spremenljivke števila, tj. fff4. Vrednost spremenljivke števila je 50. Toda naslov spremenljivke kazalca p je aaa3.

S pomočjo * ( posredni operater ), lahko izpišemo vrednost kazalčeve spremenljivke p.

rr algoritem

Oglejmo si primer kazalca, kot je razloženo za zgornjo sliko.

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

Izhod

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

Kazalec na niz

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

Kazalec na funkcijo

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

Kazalec na strukturo

 struct st { int i; float f; }ref; struct st *p = &ref; 
c kazalci

Prednost kazalca

1) Kazalec zmanjša kodo in izboljša delovanje , uporablja se za pridobivanje nizov, dreves itd. in se uporablja z nizi, strukturami in funkcijami.

2) Lahko vrne več vrednosti iz funkcije s pomočjo kazalca.

3) Omogoča vam, da dostop do katere koli pomnilniške lokacije v pomnilniku računalnika.

Uporaba kazalca

Obstaja veliko aplikacij kazalcev v jeziku c.

1) Dinamična dodelitev pomnilnika

vrstni red po naključnem sql

V jeziku c lahko dinamično dodelimo pomnilnik z uporabo funkcij malloc() in calloc(), kjer se uporablja kazalec.

2) Nizi, funkcije in strukture

Kazalci v jeziku c se pogosto uporabljajo v nizih, funkcijah in strukturah. Zmanjša kodo in izboljša zmogljivost.

Naslov (&) operaterja

Naslov operatorja '&' vrne naslov spremenljivke. Toda za prikaz naslova spremenljivke moramo uporabiti %u.

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

Izhod

java izboljšana zanka
 value of number is 50, address of number is fff4 

NULL kazalec

Kazalec, ki mu ni dodeljena nobena vrednost, razen NULL, je znan kot kazalec NULL. Če v času deklaracije v kazalcu nimate nobenega naslova, ki bi ga bilo treba navesti, lahko dodelite vrednost NULL. Zagotovil bo boljši pristop.

 int *p=NULL; 

V večini knjižnic je vrednost kazalca 0 (nič).

Kazalec Program za zamenjavo dveh številk brez uporabe 3. spremenljivke.

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

Izhod

 Before swap: *p1=10 *p2=20 After swap: *p1=20 *p2=10 

Branje kompleksnih kazalcev

Med branjem kompleksnih kazalcev v C je treba upoštevati več stvari. Oglejmo si prednost in asociativnost operatorjev, ki se uporabljajo glede kazalcev.

OperaterPrednostAsociativnost
(), []1Od leve proti desni
*, identifikator2Od desne proti levi
Vrsta podatkov3-

Tukaj moramo opaziti, da

zgornji ukaz unix
  • (): Ta operator je operator v oklepaju, ki se uporablja za deklaracijo in definiranje funkcije.
  • []: Ta operator je operator indeksa matrike
  • * : Ta operator je kazalec.
  • Identifikator: je ime kazalca. Temu bo vedno dodeljena prednost.
  • Podatkovni tip: Podatkovni tip je tip spremenljivke, na katero naj kaže kazalec. Vključuje tudi modifikator, kot je signed int, long itd.).

Kako brati kazalec: int (*p)[10].

Za branje kazalca moramo videti, da imata () in [] enako prednost. Zato je tu treba upoštevati njihovo asociativnost. Asociativnost je od leve proti desni, zato ima prednost ().

Znotraj oklepaja () imata operator kazalca * in ime (identifikator) kazalca p enako prednost. Zato je treba tukaj upoštevati njihovo asociativnost, ki je od desne proti levi, tako da ima prednost p, druga prioriteta pa *.

Dodelite 3. prioriteto [], ker ima podatkovni tip zadnjo prednost. Zato bo kazalec videti takole.

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

Kazalec bo prebran kot p kazalec na niz celih števil velikosti 10.

Primer

Kako brati naslednji kazalec?

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

Pojasnilo

Ta kazalec se bo prebral kot p je kazalec na tako funkcijo, ki sprejme prvi parameter kot kazalec na enodimenzionalno matriko celih števil velikosti dve in drugi parameter kot kazalec na funkcijo, katere parameter je neveljaven in vrnjeni tip celo število.