logo

Statische variabelen in C

Statische variabelen hebben de eigenschap hun waarde te behouden, zelfs als ze buiten hun bereik vallen! Een statische variabele behoudt dus zijn eerdere waarde in zijn vorige bereik en wordt niet opnieuw geïnitialiseerd in het nieuwe bereik.

Syntaxis:



  static   data_type   var_name   = var_value;>

Hieronder volgen enkele interessante feiten over statische variabelen in C:

npm schone cachekracht

1) Een statische int-variabele blijft in het geheugen terwijl het programma draait. Een normale of automatische variabele wordt vernietigd wanneer een functieaanroep waarbij de variabele werd gedeclareerd, voorbij is.
We kunnen bijvoorbeeld static int gebruiken om het aantal keren te tellen dat een functie wordt aangeroepen, maar een autovariabele kan voor dit doel niet worden gebruikt.

Voorbeeld



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;> }>

>

>

Uitvoer

1 2>

Het bovenstaande programma drukt 1 2 af omdat statische variabelen slechts één keer worden geïnitialiseerd en actief blijven tot het einde van het programma. Daarom kunnen ze hun waarde behouden tussen meerdere functieaanroepen.

Laten we dezelfde code proberen voor de lokale autovariabele.

Voorbeeld

tekenreeks naar char java

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;> }>

>

>

Uitvoer

selecteer uit meerdere tabellen in sql
1 1>

2) Aan statische variabelen wordt geheugen toegewezen in het datasegment, niet in het stapelsegment. Zie de geheugenindeling van C-programma's voor details.

3) Statische variabelen (zoals globale variabelen) worden geïnitialiseerd als 0 als ze niet expliciet worden geïnitialiseerd. In het onderstaande programma wordt de waarde van x bijvoorbeeld afgedrukt als 0, terwijl de waarde van y iets onzin is. Zien dit voor meer details.

Voorbeeld

C




// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d %d'>, x, y);> }>

>

Java-gebruiksdatum
>

Uitvoer

0  [some_garbage_value]>

4) In C kunnen statische variabelen alleen worden geïnitialiseerd met behulp van constante letterlijke waarden. Het volgende programma mislukt bijvoorbeeld tijdens de compilatie. Zien dit voor meer details.

Voorbeeld

C




javascript afdrukken

#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }>

>

>

Uitvoer

In function 'main': 9:5: error: initializer element is not constant  static int i = initializer();  ^>

Opmerking: Houd er rekening mee dat deze voorwaarde niet geldt in C++. Dus als u het programma opslaat als een C++-programma, wordt het gecompileerd en werkt het prima.

5) Statische globale variabelen en functies zijn ook mogelijk in C/C++. Het doel hiervan is om de reikwijdte van een variabele of functie tot een bestand te beperken. Raadpleeg alstublieft Statische functies in C voor meer details.

6) Statische variabelen mogen niet binnen een structuur worden gedeclareerd. De reden hiervoor is dat de C-compiler vereist dat de volledige structuurelementen bij elkaar worden geplaatst (dat wil zeggen dat de geheugentoewijzing voor structuurleden aaneengesloten moet zijn). Het is mogelijk om de structuur binnen de functie aan te geven (stapelsegment) of geheugen dynamisch toe te wijzen (heapsegment) of het kan zelfs globaal zijn (BSS of datasegment). Hoe het ook zij, alle structuurleden moeten zich in hetzelfde geheugensegment bevinden, omdat de waarde voor het structuurelement wordt opgehaald door de offset van het element vanaf het beginadres van de structuur te tellen. Door slechts één lid in een datasegment op te splitsen, wordt het doel van de structuur tenietgedaan en is het mogelijk om een ​​hele structuur statisch te maken.

Gerelateerde artikelen:

  • Statisch trefwoord in C++
  • Quiz over statisch zoekwoord
  • Statische gegevensleden in C++
  • Wanneer worden statische objecten vernietigd?
  • Interessante feiten over statische lidfuncties
  • Kunnen statische functies virtueel zijn?
  • Vergelijking van statische trefwoorden in C++ en Java
  • Statische functies in C