Osoittimet ovat tärkeitä monille C-ohjelmille, mutta niitä voi olla vaikea ymmärtää. Tarkista niiden syntaksi ja miten ne toimivat käytännön esimerkkien avulla.
Osoittimet ovat olennainen osa C-ohjelmointia, jotka tarvitset hyvän ymmärryksen käyttääksesi kieltä tehokkaasti. Ne auttavat tehokkaassa muistinhallinnassa, tietojen välittämisessä viitteellä, taulukoiden ja merkkijonojen käsittelyssä ja paljon muuta. Ne vaativat kuitenkin huolellista käyttöä virheiden välttämiseksi.
Tutustu C-osoittimien yksityiskohtiin muistin ja osoitteiden ymmärtämisestä osoittimien aritmetiikkaan.
Muisti ja osoitteet
Muisti - käytetään usein lyhenteenä sanalle RAM (Random Access Memory)-on tallennustila tietokoneessa, joka sisältää tiedot ja ohjeet ohjelman suorittamiseen. Se toimii työtilana ohjelmallesi. Pienin muistiyksikkö on tyypillisesti tavu, joka vastaa kahdeksan bittiä.
Jokaisella muistipaikalla on yksilöllinen osoite, ja se voi tallentaa eri määrän tietoa tietokoneesta riippuen. Kun määrität muuttujan C: ssä, määrität sille implisiittisesti muistipaikan tietojen tallentamista varten. Ajattele sitä kuin taloa, jolla on ainutlaatuinen osoite, jonka avulla voit paikantaa sen.
Kuvittele tietokoneesi muisti tallennussolujen sarjana, joista jokainen sisältää tavun dataa. Oletetaan, että on kaksi muuttujaa, x ja y, C-ohjelmassa:
int x = 5;
int y = 10;
Muistissa se saattaa näyttää tältä:
Osoite |
Data |
---|---|
1000 |
5 |
1004 |
10 |
Erilliset muistipaikat tallentavat nämä muuttujat. Tiedot, jotka x edustaa asuu muistiosoitteessa 1000, while ytiedot varaavat muistiosoitteen 1004.
Muistin ja osoitteiden ymmärtäminen on ratkaisevan tärkeää, kun työskentelet osoittimien kanssa, koska ne ovat muuttujia, jotka tallentavat muistiosoitteita. Niiden avulla voit käyttää ja käsitellä tiettyyn muistipaikkaan tallennettuja tietoja.
Osoittimien ilmoittaminen ja alustaminen C: ssä
Ennen kuin voit muokata tietoja C: n osoittimilla, sinun on ilmoitettava ja alustettava se.
julistus
Määritä osoittimen tietotyyppi, jota seuraa tähti (*) ja sitten osoittimen nimi. Esimerkiksi:
int *ptr;
Tässä, int *ptr ilmoittaa osoittimen nimeltä ptr joka voi tallentaa kokonaisluvun muistiosoitteen.
Alustus
Ilmoituksen jälkeen sinun tulee alustaa se muistiosoitteella, johon se osoittaa. Voit alustaa sen seuraavasti:
int x = 5;
int *ptr = &x;
Tässä julistuksessa & operaattori hakee x-muuttujan osoitteen. Koodi pohjimmiltaan sanoo "ptr on muuttuja, se tallentaa kokonaisluvun arvon muistipaikan, ja tämä sijainti on missä tahansa, johon x tällä hetkellä viittaa."
Nyt, ptr sisältää kokonaislukumuuttujan osoitteen x. Esimerkiksi:
Muuttuva |
Osoite |
Arvo |
---|---|---|
x |
1000 |
5 |
ptr |
1000 |
C: n osoittimet eivät vain tallenna muuttujan osoitetta, vaan niillä on myös oma yksilöllinen osoite tietokoneen muistissa.
Viittausten poisto
C-osoittimen viittauksen poistaminen tarkoittaa osoittimen osoittamaan muistiosoitteeseen tallennettuun arvoon pääsyä.
Oletetaan, että sinulla on osoitin, int *ptr, joka osoittaa kokonaislukumuuttujaan ja tämän muuttujan arvo on 10. Voit käyttää arvoa osoittimen kautta käyttämällä tähteä (*) operaattori:
int x = 10;
int *ptr = &x; // ptr points to the address of x
int value = *ptr; // Dereferencing ptr to get the value
Tässä esimerkissä käytetään ptr muuttuja arvon hakemiseksi muistiosoitteesta, johon se osoittaa. Niin, arvo Sillä on nyt arvo 10, joka on sisältö x.
Osoittimen aritmetiikka
Osoitinaritmetiikka on tehokas C: n ominaisuus, joka on erityisen hyödyllinen taulukoiden ja merkkijonojen (jotka ovat merkkijonoja) käsittelyssä. Sen avulla voit suorittaa aritmeettisia operaatioita osoittimille liikkuaksesi muistissa.
Tässä on esimerkki siitä, kuinka voit käyttää sitä.
Aloita ilmoittamalla kokonaislukujen joukko:
int numbers[] = {10, 20, 30};
Määritä osoitin int: lle ja määritä sille numerotaulukon muistipaikka:
int *ptr = numbers;
Sinun ei tarvitse käyttää "&"-operaattoria tässä, koska numerot ovat jo implisiittisesti osoitintyyppiä.
Ptr-muuttuja osoittaa nyt taulukon ensimmäiseen elementtiin:
printf("%d\n", *ptr); // 10
Voit siirtää osoittimen taulukon kolmanteen elementtiin suurentamalla sitä kahdella:
ptr += 2;
printf("%d\n", *ptr); // 30
Voit siirtää osoitinta taaksepäin vähentämällä siitä:
ptr--;
printf("%d\n", *ptr); ;// 20
Osoitinaritmetiikka on erityisen hyödyllinen taulukoissa liikkumiseen ja dynaamisen muistin varauksen kanssa työskentelyyn.
Osoittimet ja funktiot C: ssä
Jos sinä ymmärtää, miten funktiot toimivat C-ohjelmoinnissa, niin olet hyvällä tiellä käyttämään funktioosoittimia. Tässä on joitain tapoja käyttää niitä.
Toimintoosoittimet
Voit ilmoittaa ja käyttää funktioosoittimia käyttääksesi funktioita dynaamisesti, aivan kuten mitä tahansa muuta arvoa. Tämä on erityisen hyödyllistä takaisinkutsuissa ja dynaamisten toimintojen suorittamisessa.
int (*operation)(int, int); // Declare a function pointer
operation = add; // Pointer to an add function
int result = operation(5, 3); // Call the function through the pointer
Tämä koodi ilmoittaa funktioosoittimen nimeltä operaatio joka voi osoittaa funktioon, joka ottaa kaksi kokonaislukua ja palauttaa yhden. Se määrittää (osoittimen) lisätä toimia operaatio. Se käyttää sitten operaatiomuuttujaa epäsuoraan kutsumiseen lisää (5, 3).
Referenssin ohitse
Osoittimien avulla voit välittää argumentteja viitaten funktioihin, jolloin voit muokata funktion alkuperäisiä tietoja. Tämä on ratkaisevan tärkeää funktioille, joiden on muutettava muuttujan arvoa toiminta-alueensa ulkopuolella.
voidmodifyValue(int *x){
*x = 42; // Modifies the value of x in the calling code
}
The modifyValue funktio muuttaa kutsukoodin sille antaman argumentin arvon asettamalla sen arvoon 42.
Dynaaminen muistin varaus
Funktiot voivat palauttaa osoittimia dynaamisesti varattuun muistiin. Tämä on yleistä, kun sinun on luotava ja palautettava rajoittamattomia tietorakenteita, kuten taulukoita tai linkitettyjä luetteloita. Sinun on tehtävä sinulla on hyvä käsitys pino- ja pinomuistista käyttää sitä.
int *createArray(intsize){
int *arr = (int *)malloc(size * sizeof(int));
return arr;
}
Tämä koodi määrittelee toiminnon, luodaArray, se vaatii kokonaisluvun, koko, syötteenä. Funktion sisällä se varaa dynaamisesti muistia määritetyn kokoiselle kokonaislukujoukolle käyttämällä malloc. Kun taulukko on alustettu, se palauttaa osoittimen tähän uuteen taulukkoon.
Yleiset käyttötavat
Osoittimet ovat välttämättömiä C: ssä useista syistä, ja ne ovat mitä erottaa C: n muista ohjelmointikielistä, kuten Pythonista. Tässä on joitain yleisiä käyttötapoja:
- Dynaaminen muistin varaus
- Array Manipulation
- Referenssin ohitse
- Tietorakenteet
- Resurssienhallinta
Näiden yleisten osoittimien käyttötapojen ymmärtäminen voi parantaa C-ohjelmointitaitojasi. Harjoittele joitain näistä parantaaksesi ymmärrystäsi osoittimista.
Harjoittele osoittimien käyttöä C-ohjelmoinnissa
C-ohjelmoinnin osoittimien hallitseminen on arvokas taito, jonka avulla voit hallita tehokkaasti muistia, käsitellä tietoja ja suorittaa edistyneitä toimintoja. Harjoittelu ja osoittimien käytön taito parantaa huomattavasti kykyäsi luoda kestäviä ja resurssitehokkaita C-ohjelmia.