logo

C-osoitin

Kuten jo tiedämme 'mikä on osoitin' , osoitin on muuttuja, joka tallentaa toisen muuttujan osoitteen. Viittauksen poistooperaattori tunnetaan myös epäsuuntaoperaattorina, jota edustaa (*). Kun osoitinmuuttujan kanssa käytetään epäsuoraoperaattoria (*), se tunnetaan nimellä osoittimen viittauksen poistaminen. Kun poistamme viittauksen osoittimeen, palautetaan tämän osoittimen osoittaman muuttujan arvo.

Miksi käytämme viittauksenpoistoosoitinta?

Osoittimen viittauksen poistamista käytetään seuraavista syistä:

karttakonekirjoitus
  • Sitä voidaan käyttää osoittimen osoittamaan muistipaikkaan tallennettuihin tietoihin tai niitä voidaan käsitellä.
  • Kaikki viittauksesta poistettuun osoittimeen sovelletut toiminnot vaikuttavat suoraan sen muuttujan arvoon, johon se osoittaa.

Tarkastellaan seuraavia vaiheita osoittimen viittauksen poistamiseksi.

  • Ensin määritetään kokonaislukumuuttuja, johon osoitin osoittaa.
 int x =9; 
  • Nyt julistamme kokonaislukuosoittimen muuttujan.
 int *ptr; 
  • Kokonaisluvun osoitinmuuttujan ilmoittamisen jälkeen tallennamme 'x'-muuttujan osoitteen osoitinmuuttujaan 'ptr'.
 ptr=&x; 
  • Voimme muuttaa 'x'-muuttujan arvoa poistamalla viittauksen osoittimeen 'ptr' alla kuvatulla tavalla:
 *ptr =8; 

Yllä oleva rivi muuttaa 'x'-muuttujan arvon 9:stä 8:aan, koska 'ptr' osoittaa 'x'-sijaintiin ja 'ptr':n viittauksen poistaminen, eli *ptr=8 päivittää x:n arvon.

Yhdistetään kaikki yllä olevat vaiheet:

 #include int main() { int x=9; int *ptr; ptr=&x; *ptr=8; printf('value of x is : %d', x); return 0;} 

Lähtö

C-osoitin

Tarkastellaanpa toista esimerkkiä.

 #include int main() { int x=4; int y; int *ptr; ptr=&x; y=*ptr; *ptr=5; printf('The value of x is : %d',x); printf('
 The value of y is : %d',y); return 0; } 

Yllä olevassa koodissa:

  • Ilmoitamme kaksi muuttujaa 'x' ja 'y', joissa 'x' sisältää '4'-arvon.
  • Ilmoitamme osoitinmuuttujan 'ptr'.
  • Osoitinmuuttujan ilmoittamisen jälkeen annamme 'x'-muuttujan osoitteen osoittimelle 'ptr'.
  • Kuten tiedämme, että 'ptr' sisältää 'x'-muuttujan osoitteen, niin '*ptr' on sama kuin 'x'.
  • Annamme 'x':n arvon 'y':lle ptr-muuttujan avulla, eli y=* ptr x-muuttujan käyttämisen sijaan.

Huomautus: Jos muutamme x:n arvoa, myös y:n arvo muuttuu, koska osoitin 'ptr' pitää sisällään 'x'-muuttujan osoitteen. Mutta näin ei tapahdu, koska 'y' tallentaa paikallisen kopion arvosta '5'.

Lähtö

C-osoitin

Mietitään toista skenaariota.

 #include int main() { int a=90; int *ptr1,*ptr2; ptr1=&a; ptr2=&a; *ptr1=7; *ptr2=6; printf('The value of a is : %d',a); return 0; } 

Yllä olevassa koodissa:

  • Ensin julistamme 'a'-muuttujan.
  • Sitten julistamme kaksi osoitinta, eli ptr1 ja ptr2.
  • Molemmat osoittimet sisältävät 'a'-muuttujan osoitteen.
  • Annamme arvon '7' *ptr1:lle ja '6' *ptr2:lle. 'a':n lopullinen arvo olisi '6'.

Huomautus: Jos meillä on useampi kuin yksi osoitin, joka osoittaa samaan paikkaan, yhden osoittimen tekemä muutos on sama kuin toisen osoittimen.

Lähtö

C-osoitin