logo

C ukazovatele

Ukazovateľ v jazyku C je premenná, ktorá ukladá adresu inej premennej. Táto premenná môže byť typu int, char, pole, funkcia alebo akýkoľvek iný ukazovateľ. Veľkosť ukazovateľa závisí od architektúry. V 32-bitovej architektúre je však veľkosť ukazovateľa 2 bajty.

Zvážte nasledujúci príklad na definovanie ukazovateľa, ktorý ukladá adresu celého čísla.

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

Vyhlásenie ukazovateľa

Ukazovateľ v jazyku c môže byť deklarovaný pomocou * (symbol hviezdičky). Je tiež známy ako nepriamy ukazovateľ, ktorý sa používa na dereferencovanie ukazovateľa.

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

Príklad ukazovateľa

Príklad použitia ukazovateľov na tlač adresy a hodnoty je uvedený nižšie.

príklad ukazovateľa

Ako môžete vidieť na obrázku vyššie, premenná ukazovateľa ukladá adresu premennej čísla, t.j. fff4. Hodnota číselnej premennej je 50. Ale adresa ukazovateľovej premennej p je aaa3.

Pomocou * ( nepriamy operátor ), môžeme vytlačiť hodnotu premennej ukazovateľa p.

java double to string

Pozrime sa na príklad ukazovateľa, ako je vysvetlený na obrázku vyššie.

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

Výkon

koľko miliónov je v miliarde
 Address of number variable is fff4 Address of p variable is fff4 Value of p variable is 50 

Ukazovateľ na pole

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

Ukazovateľ na funkciu

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

Ukazovateľ na štruktúru

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

Výhoda ukazovateľa

1) Ukazovateľ znižuje kód a zlepšuje výkon , používa sa na získavanie reťazcov, stromov atď. a používa sa s poľami, štruktúrami a funkciami.

2) Môžeme vrátiť viacero hodnôt z funkcie pomocou ukazovateľa.

3) Umožňuje vám to prístup k ľubovoľnému miestu pamäte v pamäti počítača.

Použitie ukazovateľa

V jazyku c existuje veľa aplikácií ukazovateľov.

1) Dynamická alokácia pamäte

V jazyku c môžeme dynamicky alokovať pamäť pomocou funkcií malloc() a calloc(), kde sa používa ukazovateľ.

2) Polia, funkcie a štruktúry

Ukazovatele v jazyku c sú široko používané v poliach, funkciách a štruktúrach. Znižuje kód a zlepšuje výkon.

Adresa (&) operátora

Adresa operátora '&' vracia adresu premennej. Na zobrazenie adresy premennej však musíme použiť %u.

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

Výkon

 value of number is 50, address of number is fff4 

Ukazovateľ NULL

Ukazovateľ, ktorý nemá priradenú žiadnu hodnotu, ale má hodnotu NULL, je známy ako ukazovateľ NULL. Ak v čase deklarácie nemáte v ukazovateli uvedenú žiadnu adresu, môžete priradiť hodnotu NULL. Poskytne lepší prístup.

 int *p=NULL; 

Vo väčšine knižníc je hodnota ukazovateľa 0 (nula).

Ukazovateľ Program na výmenu dvoch čísel bez použitia 3. premennej.

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

Výkon

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

Čítanie zložitých ukazovateľov

Existuje niekoľko vecí, ktoré je potrebné vziať do úvahy pri čítaní komplexných ukazovateľov v C. Pozrime sa na prioritu a asociatívnosť operátorov, ktoré sa používajú pri ukazovateľoch.

OperátorPrednosťAsociativita
(), []1Zľava doprava
*, identifikátor2Zprava doľava
Dátový typ3-

Tu si musíme všimnúť,

  • (): Tento operátor je operátor v zátvorke, ktorý sa používa na deklarovanie a definovanie funkcie.
  • []: Tento operátor je operátor dolného indexu poľa
  • * : Tento operátor je ukazovateľ.
  • Identifikátor: Je to názov ukazovateľa. Tomuto bude vždy priradená priorita.
  • Typ údajov: Typ údajov je typ premennej, na ktorú má ukazovateľ ukazovať. Zahŕňa aj modifikátor, ako je podpísaná int, dlhá atď.).

Ako čítať ukazovateľ: int (*p)[10].

Aby sme mohli čítať ukazovateľ, musíme vidieť, že () a [] majú rovnakú prednosť. Preto tu treba zvážiť ich asociatívnosť. Asociativita je zľava doprava, takže priorita má ().

Vo vnútri zátvorky (), operátor ukazovateľa * a názov ukazovateľa (identifikátor) p majú rovnakú prednosť. Preto je potrebné zvážiť ich asociatívnosť, ktorá je sprava doľava, takže priorita má p a druhá priorita *.

počítač vynájdený rok

Priraďte 3. prioritu [], pretože typ údajov má poslednú prioritu. Preto bude ukazovateľ vyzerať nasledovne.

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

Ukazovateľ sa bude čítať ako p je ukazovateľ na pole celých čísel veľkosti 10.

Príklad

Ako čítať nasledujúci ukazovateľ?

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

Vysvetlenie

Tento ukazovateľ sa bude čítať ako p je ukazovateľ na takú funkciu, ktorá akceptuje prvý parameter ako ukazovateľ na jednorozmerné pole celých čísel veľkosti dva a druhý parameter ako ukazovateľ na funkciu, ktorej parameter je neplatný a návratový typ je celé číslo.