C-osoittimia on helppo ja hauska oppia. Jotkut C-ohjelmointitehtävät suoritetaan helpommin osoittimilla, ja muita tehtäviä, kuten dynaamista muistin allokointia, ei voida suorittaa ilman osoittimia. Joten on välttämätöntä oppia osoittimia, jotta siitä tulisi täydellinen C-ohjelmoija. Aloitetaan niiden oppiminen yksinkertaisilla ja helpoilla vaiheilla.
Kuten tiedät, jokainen muuttuja on muistipaikka ja jokaisella muistipaikalla on määritetty osoite, johon pääsee ampersandilla (&) -operaattori, joka merkitsee osoitetta muistissa. Tarkastellaan seuraavaa esimerkkiä, joka tulostaa määriteltyjen muuttujien osoitteet –
Kun yllä oleva koodi käännetään ja suoritetaan, se tuottaa seuraavan tulos –
Address of var1 variable: bff5a400Address of var2 variable: bff5a3f6
Mitä osoittimet ovat?
Osoitin on muuttuja, jonka arvo on toisen muuttujan osoite, ts. suora osoite Muistin tai vakion tavoin sinun on ilmoitettava osoitin, ennen kuin käytät sitä muuttujan osoitteen tallentamiseen. Osoittimen muuttujan ilmoituksen yleinen muoto on –
type *var-name;
Tässä tyyppi on osoittimen perustyyppi; sen on oltava kelvollinen C-tietotyyppi ja var-nimi on osoitinmuuttujan nimi. Osoittimen julistamiseen käytetty tähti * on sama tähti, jota käytetään kertomiseen. Tähän lausekkeeseen tähtiä käytetään kuitenkin osoittamaan muuttuja osoittimeksi. Tutustu joihinkin kelvollisiin osoitinlausekkeisiin –
int *ip; /* pointer to an integer */double *dp; /* pointer to a double */float *fp; /* pointer to a float */char *ch /* pointer to a character */
Kaikkien osoittimien arvon todellinen tietotyyppi, joko kokonaisluku, kelluva, merkki tai muu , on sama, pitkä heksadesimaaliluku, joka edustaa muistiosoitetta. Ainoa ero eri tietotyyppien osoittimien välillä on muuttujan tai vakion tietotyyppi, johon osoitin osoittaa.
Kuinka osoittimia käytetään?
On olemassa muutamia tärkeitä toimintoja, mitä teemme osoittimien avulla hyvin usein. (a) Määritämme osoitinmuuttujan, (b) osoitamme muuttujan osoitteen osoittimelle ja (c) pääsemme lopulta osoittimen muuttujassa käytettävissä olevaan osoitteeseen. Tämä tapahtuu käyttämällä unary-operaattoria *, joka palauttaa muuttujan arvon, joka sijaitsee operandin määrittelemässä osoitteessa. Seuraava esimerkki käyttää näitä toimintoja –
Kun yllä oleva koodi käännetään ja suoritetaan, se tuottaa seuraavan tuloksen –
Address of var variable: bffd8b3cAddress stored in ip variable: bffd8b3cValue of *ip variable: 20
NULL-osoittimet
NULL-arvon osoittaminen osoitinmuuttujalle on aina hyvä tapa, jos sinulla ei ole tarkkaa osoitetta. Tämä tehdään muuttujan ilmoituksen yhteydessä. NULL-osoitinta kutsutaan nollaosoittimeksi.
NULL-osoitin on vakio, jonka arvo on nolla, joka on määritelty useissa vakiokirjastoissa. Harkitse seuraavaa ohjelmaa –
#include <stdio.h>int main () { int *ptr = NULL; printf("The value of ptr is : %x\n", ptr ); return 0;}
Kun yllä oleva koodi kootaan ja suoritetaan, se tuottaa seuraavan tuloksen –
The value of ptr is 0
Useimmissa käyttöjärjestelmissä ohjelmat eivät saa käyttää muistia osoitteessa 0, koska käyttöjärjestelmä on varannut tämän muistin. Muistiosoitteella 0 on kuitenkin erityinen merkitys; se osoittaa, että osoitinta ei ole tarkoitettu osoittamaan käytettävissä olevaan muistipaikkaan. Mutta käytännön mukaan, jos osoitin sisältää nolla (nolla) -arvon, sen oletetaan osoittavan mitään.
Voit tarkistaa nollaosoittimen käyttämällä ”if” -lausetta seuraavasti –
if(ptr) /* succeeds if p is not null */if(!ptr) /* succeeds if p is null */
Osoittimet yksityiskohtaisesti
Osoittimilla on monia mutta helposti käsitteitä ja ne ovat erittäin tärkeitä C-ohjelmoinnille. Seuraavien tärkeiden osoitinkäsitteiden tulisi olla selkeitä kaikille C-ohjelmoijille –
Sr.Nro. | Käsite & Kuvaus |
---|---|
1 | Osoittimen aritmeettinen
Osoittimissa voidaan käyttää neljää aritmeettista operaattoria: ++, -, +, – |
2 | Osoittimien taulukko
Voit määrittää taulukot pitämään useita osoittimia. |
3 | Osoitin osoittimeen
C antaa sinun olla osoittimen osoittimessa ja niin edelleen. |
4 | Osoittimien siirtäminen C: n funktioille
Passing argumentti viitteellä tai osoitteella antaa välitetyn argumentin muuttaa kutsuvassa funktiossa kutsutulla funktiolla. |
5 | Return osoitin funktioista kohdassa C
C sallii toiminnon palauttaa osoittimen myös paikalliseen muuttujaan, staattiseen muuttujaan ja dynaamisesti varattuun muistiin. |