logo

C ukazatele

Ukazatel v jazyce C je proměnná, která uchovává adresu jiné proměnné. Tato proměnná může být typu int, char, pole, funkce nebo jakýkoli jiný ukazatel. Velikost ukazatele závisí na architektuře. V 32bitové architektuře je však velikost ukazatele 2 bajty.

Zvažte následující příklad pro definování ukazatele, který ukládá 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ášení ukazatele

Ukazatel v jazyce c lze deklarovat pomocí * (symbol hvězdičky). Je také známý jako nepřímý ukazatel používaný k dereferenci ukazatele.

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

Příklad ukazatele

Níže je uveden příklad použití ukazatelů pro tisk adresy a hodnoty.

příklad ukazatele

Jak můžete vidět na obrázku výše, proměnná ukazatel ukládá adresu proměnné čísla, tj. fff4. Hodnota číselné proměnné je 50. Ale adresa ukazatelové proměnné p je aaa3.

Pomocí * ( nepřímý operátor ), můžeme vytisknout hodnotu ukazatelové proměnné p.

řetězec v poli v c

Podívejme se na příklad ukazatele vysvětlený pro výše uvedený obrázek.

 #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ýstup

java výjimky
 Address of number variable is fff4 Address of p variable is fff4 Value of p variable is 50 

Ukazatel na pole

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

Ukazatel na funkci

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

Ukazatel na strukturu

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

Výhoda ukazatele

1) Ukazatel snižuje kód a zlepšuje výkon , používá se k načítání řetězců, stromů atd. a používá se s poli, strukturami a funkcemi.

2) Můžeme vrátit více hodnot z funkce pomocí ukazatele.

3) To vám umožní přístup k libovolnému paměťovému místu v paměti počítače.

Použití ukazatele

V jazyce C existuje mnoho aplikací ukazatelů.

1) Dynamická alokace paměti

V jazyce c můžeme dynamicky alokovat paměť pomocí funkcí malloc() a calloc(), kde se používá ukazatel.

2) Pole, funkce a struktury

Ukazatele v jazyce c jsou široce používány v polích, funkcích a strukturách. Snižuje kód a zlepšuje výkon.

Adresa (&) operátora

Adresa operátoru '&' vrací adresu proměnné. K zobrazení adresy proměnné však musíme použít %u.

jak předělat ve photoshopu
 #include int main(){ int number=50; printf('value of number is %d, address of number is %u',number,&number); return 0; } 

Výstup

 value of number is 50, address of number is fff4 

Ukazatel NULL

Ukazatel, kterému není přiřazena žádná hodnota, ale je NULL, se nazývá ukazatel NULL. Pokud nemáte žádnou adresu, která by měla být uvedena v ukazateli v době deklarace, můžete přiřadit hodnotu NULL. Poskytne lepší přístup.

 int *p=NULL; 

Ve většině knihoven je hodnota ukazatele 0 (nula).

Ukazatel Program pro výměnu dvou čísel bez použití 3. proměnné.

 #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ýstup

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

Čtení složitých ukazatelů

Existuje několik věcí, které je třeba vzít v úvahu při čtení komplexních ukazatelů v C. Podívejme se na prioritu a asociativitu operátorů, které se používají ohledně ukazatelů.

OperátorPřednostAsociativnost
(), []1Zleva do prava
*, identifikátor2Zprava doleva
Datový typ3-

Zde si musíme všimnout,

  • (): Tento operátor je operátor hranatých závorek používaný k deklaraci a definování funkce.
  • []: Tento operátor je operátor dolního indexu pole
  • * : Tento operátor je ukazatelový operátor.
  • Identifikátor: Je to název ukazatele. Tomu bude vždy přiřazena priorita.
  • Datový typ: Datový typ je typ proměnné, na kterou má ukazatel ukazovat. Zahrnuje také modifikátor jako signovaný int, dlouhý atd.).

Jak číst ukazatel: int (*p)[10].

Abychom přečetli ukazatel, musíme vidět, že () a [] mají stejnou prioritu. Proto je zde třeba zvážit jejich asociativitu. Asociativita je zleva doprava, takže priorita má ().

Uvnitř závorky (), operátor ukazatele * a název ukazatele (identifikátor) p mají stejnou prioritu. Proto je zde třeba uvažovat jejich asociativitu, která je zprava doleva, takže priorita má p a druhá priorita *.

mylivecricket.in

Přiřaďte 3. prioritu [], protože datový typ má poslední prioritu. Ukazatel tedy bude vypadat následovně.

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

Ukazatel bude čten jako p je ukazatel na pole celých čísel o velikosti 10.

Příklad

Jak číst následující ukazatel?

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

Vysvětlení

Tento ukazatel se bude číst jako p je ukazatel na takovou funkci, která přijímá první parametr jako ukazatel na jednorozměrné pole celých čísel velikosti dva a druhý parametr jako ukazatel na funkci, jejíž parametr je neplatný a návratový typ je celé číslo.