Statiskajiem mainīgajiem ir īpašība saglabāt savu vērtību pat pēc tam, kad tie ir ārpus to darbības jomas! Tādējādi statiskais mainīgais saglabā savu iepriekšējo vērtību iepriekšējā tvērumā un netiek inicializēts atkārtoti jaunajā tvērumā.
Sintakse:
static data_type var_name = var_value;>
Tālāk ir sniegti daži interesanti fakti par statiskajiem mainīgajiem C:
konvertēt virkni uz jsonobject java
1) Statisks int mainīgais paliek atmiņā, kamēr programma darbojas. Parastais vai automātiskais mainīgais tiek iznīcināts, kad ir beidzies funkcijas izsaukums, kurā mainīgais tika deklarēts.
Piemēram, mēs varam izmantot statisko int, lai saskaitītu, cik reižu funkcija ir izsaukta, taču šim nolūkam nevar izmantot automātisko mainīgo.
Piemērs
C
// C Program to illustrate the static variable lifetime> #include> // function with static variable> int> fun()> {> >static> int> count = 0;> >count++;> >return> count;> }> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }> |
>
>Izvade
1 2>
Iepriekš minētā programma izdrukā 1 2, jo statiskie mainīgie tiek inicializēti tikai vienu reizi un darbojas līdz programmas beigām. Tāpēc tie var saglabāt savu vērtību starp vairākiem funkciju izsaukumiem.
Izmēģināsim to pašu kodu vietējam automātiskajam mainīgajam.
Piemērs
java evakuācijas rakstzīmes
C
// C Program to illustrate local auto variable in comparison> // of static variable.> #include> // Function> int> fun()> {> >int> count = 0;> >count++;> >return> count;> }> // Driver Code> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }> |
>
>Izvade
1 1>
2) Statiskajiem mainīgajiem tiek piešķirta atmiņa datu segmentā, nevis steka segmentā. Skatīt C programmu atmiņas izkārtojums sīkākai informācijai.
3) Statiskie mainīgie (piemēram, globālie mainīgie) tiek inicializēti kā 0, ja tie nav tieši inicializēti. Piemēram, zemāk esošajā programmā x vērtība tiek drukāta kā 0, bet y vērtība ir kaut kas atkritums. Skat šis lai iegūtu sīkāku informāciju.
Piemērs
C
pandas izveido datu rāmi
// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d
%d'>, x, y);> }> |
>
>
Izvade
0 [some_garbage_value]>
4) Programmā C statiskos mainīgos var inicializēt tikai, izmantojot konstantos literāļus. Piemēram, šādai programmai kompilācijā neizdodas. Skat šis lai iegūtu sīkāku informāciju.
sapludināt kārtot
Piemērs
C
aizstāt no virknes java
#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }> |
>
>
Izvade
In function 'main': 9:5: error: initializer element is not constant static int i = initializer(); ^>
Piezīme: Lūdzu, ņemiet vērā, ka šis nosacījums nav spēkā C++. Tātad, ja saglabājat programmu kā C++ programmu, tā tiks apkopota un darbosies labi.
5) Statiski globālie mainīgie un funkcijas ir iespējamas arī C/C++. To mērķis ir ierobežot mainīgā vai funkcijas darbības jomu līdz failam. Lūdzu atsaucies uz Statiskās funkcijas C lai iegūtu sīkāku informāciju.
6) Statiskus mainīgos nevajadzētu deklarēt struktūrā. Iemesls ir tāds, ka C kompilators pieprasa, lai visi struktūras elementi būtu novietoti kopā (t.i., atmiņas piešķiršanai struktūras elementiem jābūt blakus. Struktūru var deklarēt funkcijas iekšienē (steka segments) vai dinamiski piešķirt atmiņu (kaudzes segments), vai arī tā var būt pat globāla (BSS vai datu segments). Neatkarīgi no tā, visiem struktūras dalībniekiem ir jāatrodas vienā atmiņas segmentā, jo struktūras elementa vērtība tiek iegūta, skaitot elementa nobīdi no struktūras sākuma adreses. Viena elementa atdalīšana no datu segmenta zaudē struktūras mērķi, un ir iespējams, ka visa struktūra ir statiska.
Saistītie raksti:
- Statisks atslēgvārds programmā C++
- Viktorīna par statisku atslēgvārdu
- Statisko datu dalībnieki programmā C++
- Kad tiek iznīcināti statiski objekti?
- Interesanti fakti par statiskām dalībnieku funkcijām
- Vai statiskās funkcijas var būt virtuālas?
- Statisko atslēgvārdu salīdzinājums programmā C++ un Java
- Statiskās funkcijas C