staatiline {andmetüüp} {muutuja nimi}
Staatilised kohalikud muutujad
Kui funktsiooni muutuja on staatiline, säilitab muutuja oma väärtuse funktsioonikutsete vahel.
//Näide1.c
#kaasake
intlõbus 1()
{
intloendama=0;
loendama++;
tagasiloendama;
}
intlõbus2()
{
staatiline intloendama=0;
loendama++;
tagasiloendama;
}
intpeamine()
{
printf ('fun1 Esimene kõne tagasi: %d n',lõbus 1());
printf ('fun1 2. kõne tagasi: %d n n',lõbus 1());
printf ('fun2 Esimene kõne tagasi: %d n',lõbus2());
printf ('fun2 2. kõne tagasi: %d n',lõbus2());
tagasi 0;
}
Näites 1.c on meil kaks funktsiooni: lõbus1 () ja lõbus2 () . Sisse lõbus1 () , deklareerime ühe muutuja (loenduse) ja lähtestame selle väärtuseks 0. Seejärel suurendame loendamismuutujat ja tagastame saadud väärtuse. Kasutades peamine () , me helistame lõbus1 () kaks korda ja iga kord tagastatakse väärtus 1, kuna loendusmuutuja kustutatakse, kui helistatakse lõbus1 () on lõpetatud. Sisse lõbus2 () kuulutasime muutuja loendaja staatiliseks muutujaks. Seetõttu säilitatakse selle väärtus. Kasutades peamine () , me helistame lõbus2 () kaks korda: esimesel korral tagastatakse väärtus 1 ja teisel korral väärtus 2.
Staatilised globaalsed muutujad
Staatiline globaalne muutuja käitub samamoodi nagu teised globaalsed muutujad, kuid sellele ei pääse juurde teisest C -programmist.
Staatilised funktsioonid
C -s on funktsioonid vaikimisi globaalsed. Kui aga kuulutame staatilise funktsiooni, on see funktsioon kohalik ja sellele ei pääse juurde teisest C -programmist.
Staatiliste muutujate initsialiseerimine
Kui staatilist muutujat ei ole selgesõnaliselt initsialiseeritud, siis lähtestatakse see väärtuseks 0.
//Näide2.c
#kaasake
intpeamine()
{
staatiline inti;
printf ('I väärtus: %d n',i);
tagasi 0;
}
Näites2.c deklareerisime staatilise muutuja i, mida ei lähtestata. Kuna muutuja on aga staatiline, lähtestatakse see automaatselt väärtuseks 0.
Oluline on märkida, et staatiline muutuja tuleb initsialiseerida konstantse literaali abil; me ei saa funktsiooni tagasiväärtust kasutada staatilise muutuja initsialiseerimiseks.
//Näide3.c#kaasake
intlõbus 1()
{
tagasi 5;
}
intpeamine()
{
staatiline inti=lõbus 1();
printf ('I väärtus: %d n',i);
tagasi 0;
}
Näites 3.c proovime initsialiseerida staatilise muutuja, kasutades tagasiväärtust lõbus1 () . Kuid nagu näete, tagastatakse koodi koostamisel viga.
Kokkuvõte
Staatilise muutuja eluiga ja programmi eluiga on võrdsed.
Kui staatilist muutujat ei lähtestata, võtab see vaikeväärtuse 0.
Ei globaalsele staatilisele muutujale ega staatilisele funktsioonile ei pääse juurde programm, mis ei ole määratletud.