Ukazovatele C (s príkladmi)

V tomto výučbe sa dozviete o ukazovateľoch; čo sú ukazovatele, ako ich používate a bežné chyby, s ktorými sa môžete stretnúť pri práci s nimi pomocou príkladov.

Ukazovatele sú výkonnými funkciami programovania v jazykoch C a C ++. Predtým, ako sa naučíme ukazovatele, sa poďme dozvedieť viac o adresách v programovaní C.

Adresa v C

Ak máte vo svojom programe premennú var, &varzobrazí sa vám jej adresa v pamäti.

Počas používania tejto scanf()funkcie sme použili adresu mnohokrát .

 scanf("%d", &var);

Tu sa hodnota zadaná používateľom uloží do adresy premennej var. Zoberme si pracovný príklad.

 #include int main() ( int var = 5; printf("var: %d", var); // Notice the use of & before var printf("address of var: %p", &var); return 0; ) 

Výkon

 var: 5 adresa var: 2686778

Poznámka: Po spustení vyššie uvedeného kódu pravdepodobne dostanete inú adresu.

C Ukazovatele

Ukazovatele (ukazovateľové premenné) sú špeciálne premenné, ktoré sa používajú skôr na ukladanie adries ako hodnôt.

Syntax ukazovateľa

Takto môžeme deklarovať ukazovatele.

 int* p;

Tu sme deklarovali ukazovateľ p inttypu.

Ukazovatele môžete vyhlásiť aj týmito spôsobmi.

 int *p1; int * p2; 

Zoberme si ďalší príklad deklarovania ukazovateľov.

 int* p1, p2;

Tu sme deklarovali ukazovateľ p1 a normálnu premennú p2.

Priradenie adries ukazovateľom

Zoberme si príklad.

 int* pc, c; c = 5; pc = &c; 

Tu je 5 priradených k premennej c. A adrese c je priradený ukazovateľ pc.

Získajte hodnotu veci, na ktorú poukazujú ukazovatele

Na získanie hodnoty veci, na ktorú ukazujú ukazovatele, používame *operátor. Napríklad:

 int* pc, c; c = 5; pc = &c; printf("%d", *pc); // Output: 5

Tu je adresa cpočítača priradená ukazovateľu pc. Na získanie hodnoty uloženej na tejto adrese sme použili * pc.

Poznámka: Vo vyššie uvedenom príklade je počítač ukazovateľ, nie *pc. Nemôžete a nemali by ste robiť niečo ako *pc = &c;

Mimochodom, *nazýva sa operátor dereferencie (pri práci s ukazovateľmi). Funguje na ukazovateli a udáva hodnotu uloženú v tomto ukazovateli.

Zmena hodnoty vyznačenej ukazovateľmi

Zoberme si príklad.

 int* pc, c; c = 5; pc = &c; c = 1; printf("%d", c); // Output: 1 printf("%d", *pc); // Ouptut: 1

Adresu c sme priradili ukazovateľu pc.

Potom sme zmenili hodnotu c na 1. Pretože pc a adresa c sú rovnaké, *pcdáva nám 1.

Zoberme si ďalší príklad.

 int* pc, c; c = 5; pc = &c; *pc = 1; printf("%d", *pc); // Ouptut: 1 printf("%d", c); // Output: 1 

Adresu c sme priradili ukazovateľu pc.

Potom sme zmenili *pcna 1 pomocou *pc = 1;. Pretože pc a adresa c sú rovnaké, c sa bude rovnať 1.

Zoberme si ešte jeden príklad.

 int* pc, c, d; c = 5; d = -15; pc = &c; printf("%d", *pc); // Output: 5 pc = &d; printf("%d", *pc); // Ouptut: -15

Spočiatku je adresa c priradená počítačovému ukazovateľu pomocou pc = &c;. Pretože c je 5, *pcdáva nám 5.

Potom je adresa d priradená počítačovému ukazovateľu pomocou pc = &d;. Pretože d je -15, *pcdáva nám -15.

Príklad: práca s ukazovateľmi

Zoberme si pracovný príklad.

 #include int main() ( int* pc, c; c = 22; printf("Address of c: %p", &c); printf("Value of c: %d", c); // 22 pc = &c; printf("Address of pointer pc: %p", pc); printf("Content of pointer pc: %d", *pc); // 22 c = 11; printf("Address of pointer pc: %p", pc); printf("Content of pointer pc: %d", *pc); // 11 *pc = 2; printf("Address of c: %p", &c); printf("Value of c: %d", c); // 2 return 0; ) 

Výkon

 Adresa c: 2686784 Hodnota c: 22 Adresa ukazovateľa pc: 2686784 Obsah ukazovateľa pc: 22 Adresa ukazovateľa pc: 2686784 Obsah ukazovateľa pc: 11 Adresa c: 2686784 Hodnota c: 2 

Vysvetlenie programu

  1. int* pc, c;

    Here, a pointer pc and a normal variable c, both of type int, is created.
    Since pc and c are not initialized at initially, pointer pc points to either no address or a random address. And, variable c has an address but contains random garbage value.
  2. c = 22;

    This assigns 22 to the variable c. That is, 22 is stored in the memory location of variable c.
  3. pc = &c;

    This assigns the address of variable c to the pointer pc.
  4. c = 11;

    This assigns 11 to variable c.
  5. *pc = 2;

    This change the value at the memory location pointed by the pointer pc to 2.

Common mistakes when working with pointers

Suppose, you want pointer pc to point to the address of c. Then,

 int c, *pc; // pc is address but c is not pc = c; // Error // &c is address but *pc is not *pc = &c; // Error // both &c and pc are addresses pc = &c; // both c and *pc values *pc = c;

Here's an example of pointer syntax beginners often find confusing.

 #include int main() ( int c = 5; int *p = &c; printf("%d", *p); // 5 return 0; )

Why didn't we get an error when using int *p = &c;?

It's because

 int *p = &c;

is equivalent to

 int *p: p = &c;

V obidvoch prípadoch vytvárame ukazovateľ p(nie *p) a priraďujeme &cmu.

Aby sme sa vyhli tejto nejasnosti, môžeme použiť nasledovné vyhlásenie:

 int* p = &c;

Teraz viete, čo sú ukazovatele, a v nasledujúcom návode sa dozviete, ako súvisia ukazovatele s poliami.

Zaujímavé články...