C Varastoluokka

Tässä opetusohjelmassa opit paikallisten ja globaalien muuttujien laajuudesta ja eliniästä. Opit myös staattisista ja rekisteröidyistä muuttujista.

Jokaisella C-ohjelmoinnin muuttujalla on kaksi ominaisuutta: tyyppi ja tallennusluokka.

Tyyppi viittaa muuttujan tietotyyppiin. Tallennusluokka määrittää muuttujan laajuuden, näkyvyyden ja käyttöiän.

Tallennusluokkia on 4 tyyppiä:

  1. Automaattinen
  2. ulkoinen
  3. staattinen
  4. rekisteröidy

Paikallinen muuttuja

Lohkon sisällä ilmoitetut muuttujat ovat automaattisia tai paikallisia muuttujia. Paikalliset muuttujat ovat olemassa vain sen lohkon sisällä, johon se on ilmoitettu.

Otetaan esimerkki.

 #include int main(void) ( for (int i = 0; i < 5; ++i) ( printf("C programming"); ) // Error: i is not declared at this point printf("%d", i); return 0; )

Kun suoritat yllä olevan ohjelman, saat virheilmoituksen ilmoittamattoman tunnisteen i. Se johtuu siitä, että minä ilmoitetaan forsilmukkalohkon sisällä . Lohkon ulkopuolella se on ilmoittamaton.

Otetaan toinen esimerkki.

  int main() ( int n1; // n1 is a local variable to main() ) void func() ( int n2; // n2 is a local variable to func() ) 

Yllä olevassa esimerkissä n1 on paikallinen main()ja n2 on paikallinen func().

Tämä tarkoittaa, että et voi käyttää n1-muuttujaa sisällä, func()koska se on olemassa vain sisällä main(). Vastaavasti et voi käyttää n2-muuttujaa sisällä, main()koska se on olemassa vain sisällä func().

Globaali muuttuja

Kaikkien toimintojen ulkopuolelle ilmoitetut muuttujat tunnetaan ulkoisina tai globaaleina muuttujina. Niihin pääsee mistä tahansa ohjelman sisällä olevasta toiminnosta.

Esimerkki 1: Yleinen muuttuja

 #include void display(); int n = 5; // global variable int main() ( ++n; display(); return 0; ) void display() ( ++n; printf("n = %d", n); ) 

Tuotos

 n = 7

Oletetaan, että globaali muuttuja ilmoitetaan file1. Jos yrität käyttää kyseistä muuttujaa eri tiedostossa file2, kääntäjä valittaa. Tämän ongelman ratkaisemiseksi avainsanaa externkäytetään file2osoittamaan, että ulkoinen muuttuja on ilmoitettu toisessa tiedostossa.

Rekisterimuuttuja

registerAvainsanaa käytetään julistaa rekisteriin muuttujia. Rekisterimuuttujien oletettiin olevan nopeampia kuin paikalliset muuttujat.

Nykyaikaiset kääntäjät ovat kuitenkin erittäin hyviä koodin optimoinnissa, ja on harvinaista mahdollisuutta, että rekisterimuuttujien käyttäminen tekee ohjelmastasi nopeamman.

Rekisterimuuttujia ei käytetä, ellet työskentele sulautetuissa järjestelmissä, joissa osaat optimoida koodia tietylle sovellukselle.

Staattinen muuttuja

Staattinen muuttuja ilmoitetaan käyttämällä staticavainsanaa. Esimerkiksi;

 staattinen int i;

Staattisen muuttujan arvo säilyy ohjelman loppuun saakka.

Esimerkki 2: Staattinen muuttuja

 #include void display(); int main() ( display(); display(); ) void display() ( static int c = 1; c += 5; printf("%d ",c); ) 

Tuotos

 6 11

Ensimmäisen toimintokutsun aikana c: n arvo alustetaan arvoon 1. Sen arvo kasvaa 5: llä. Nyt c: n arvo on 6, joka tulostetaan ruudulle.

Toisen toimintopuhelun aikana c ei alusteta uudelleen arvoon 1. Se johtuu siitä, että c on staattinen muuttuja. Arvoa c korotetaan 5: llä. Nyt sen arvo on 11, joka tulostetaan ruudulle.

Mielenkiintoisia artikkeleita...