C-näpunäited (koos näidetega)

Selles õpetuses saate teada näpunäidete kohta; mis on näpunäited, kuidas te neid kasutate ja levinud vigu, millega näiteid kasutades nendega kokku puutuda võib.

Osutid on C ja C ++ programmeerimise võimsad omadused. Enne kui osutame näpunäiteid, tutvume C-programmeerimise aadressidega.

Aadress C-s

Kui teie programmis on muutuja var, &varsiis annab see teile aadressi mällu.

scanf()Funktsiooni kasutamisel oleme aadressi kasutanud mitu korda .

 scanf("%d", &var);

Siin salvestatakse kasutaja sisestatud väärtus muutuja var aadressi. Võtame toimiva näite.

 #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äljund

 var: 5 aadress var: 2686778

Märkus . Ülaltoodud koodi käivitamisel saate tõenäoliselt teise aadressi.

C Näpunäited

Kursorid (kursori muutujad) on spetsiaalsed muutujad, mida kasutatakse aadresside, mitte väärtuste salvestamiseks.

Kursori süntaks

Siit saate teada, kuidas näpunäiteid deklareerida.

 int* p;

Siin oleme kuulutanud inttüübi pointeri p .

Nendel viisidel saate deklareerida ka näpunäiteid.

 int *p1; int * p2; 

Võtame veel ühe näite näpunäidete deklareerimisest.

 int* p1, p2;

Siin oleme deklareerinud osuti p1 ja normaalmuutuja p2.

Aadresside määramine osutajatele

Võtame näite.

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

Siin omistatakse muutujale c 5. Ja c-aadressi määratakse arvutiosuti.

Saage osundajate poolt osutatava asja väärtus

Kursorite abil osutatava asja väärtuse saamiseks kasutame *operaatorit. Näiteks:

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

Siin määratakse aadress aadressile cpc-osuti. Sellele aadressile salvestatud väärtuse saamiseks kasutasime * pc.

Märkus . Ülaltoodud näites on arvuti kursor, mitte *pc. Te ei saa ega tohi midagi sellist teha *pc = &c;

Muide, *nimetatakse dereferentide operaatoriks (kui osutite töötamisel). See opereerib kursorit ja annab sellesse kursorisse salvestatud väärtuse.

Osutajate poolt osutatav muutuv väärtus

Võtame näite.

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

Oleme määranud c-aadressi pc-kursorile.

Seejärel muutsime c väärtuse väärtuseks 1. Kuna pc ja c aadress on samad, *pcannab see meile 1.

Võtame veel ühe näite.

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

Oleme määranud c-aadressi pc-kursorile.

Seejärel vahetasime *pckasutusele 1 *pc = 1;. Kuna pc ja c aadress on samad, on c võrdne 1-ga.

Võtame veel ühe näite.

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

Esialgu määratakse c-aadress pc-osuti abil pc = &c;. Kuna c on 5, *pcannab meile 5.

Seejärel määratakse d-i aadress pc-osuti abil pc = &d;. Kuna d on -15, *pcannab meile -15.

Näide: Näiturite töö

Võtame toimiva näite.

 #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äljund

 C aadress: 2686784 c väärtus: 22 osuti pc aadress: 2686784 kursor pc sisu: 22 osuti pc aadress: 2686784 kursor pc sisu: 11 aadress c: 2686784 c väärtus: 2 

Programmi selgitus

  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;

Mõlemal juhul loome kursori p(mitte *p) ja määrame &csellele.

Selle segaduse vältimiseks võime kasutada lauset järgmiselt:

 int* p = &c;

Nüüd teate, mis on osutid, ja järgmises õpetuses saate teada, kuidas osutid on massiividega seotud.

Huvitavad Artiklid...