Les variables estàtiques tenen la propietat de preservar el seu valor fins i tot després que estiguin fora del seu abast! Per tant, una variable estàtica conserva el seu valor anterior en el seu àmbit anterior i no es torna a inicialitzar en el nou àmbit.
Sintaxi:
static data_type var_name = var_value;>
A continuació es mostren alguns fets interessants sobre variables estàtiques en C:
menú de configuració d'Android
1) Una variable int estàtica roman a la memòria mentre el programa s'executa. Una variable normal o automàtica es destrueix quan s'acaba una crida de funció on es va declarar la variable.
Per exemple, podem utilitzar static int per comptar el nombre de vegades que es crida una funció, però no es pot utilitzar una variable automàtica per a aquest propòsit.
Exemple
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;> }> |
>
>Sortida
1 2>
El programa anterior imprimeix 1 2 perquè les variables estàtiques només s'inicien una vegada i viuen fins al final del programa. És per això que poden conservar el seu valor entre múltiples trucades de funció.
Provem el mateix codi per a la variable automàtica local.
Exemple
piles de 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;> }> |
>
>Sortida
1 1>
2) Les variables estàtiques s'assignen memòria al segment de dades, no al segment de pila. Veure el disseny de memòria dels programes C per als detalls.
3) Les variables estàtiques (com les variables globals) s'inicialitzen com a 0 si no s'inicien explícitament. Per exemple, al programa següent, el valor de x s'imprimeix com a 0, mentre que el valor de y és una brossa. Vegeu això per a més detalls.
Exemple
C
sinó si bash
// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d
%d'>, x, y);> }> |
>
>
Sortida
0 [some_garbage_value]>
4) En C, les variables estàtiques només es poden inicialitzar mitjançant literals constants. Per exemple, el programa següent falla en la compilació. Vegeu això per a més detalls.
Exemple
C
java afegint a una matriu
cadena en java
#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }> |
>
>
Sortida
In function 'main': 9:5: error: initializer element is not constant static int i = initializer(); ^>
Nota: Tingueu en compte que aquesta condició no es compleix en C++. Per tant, si deseu el programa com a programa C++, es compilaria i funcionarà bé.
5) Les variables i funcions globals estàtiques també són possibles en C/C++. El propòsit d'aquests és limitar l'abast d'una variable o funció a un fitxer. Si us plau refereix-te a Funcions estàtiques en C per a més detalls.
6) Les variables estàtiques no s'han de declarar dins d'una estructura. La raó és que el compilador C requereix que tots els elements de l'estructura es col·loquin junts (és a dir, l'assignació de memòria per als membres de l'estructura hauria de ser contigua. És possible declarar l'estructura dins de la funció (segment de pila) o assignar memòria dinàmicament (segment de pila) o fins i tot pot ser global (BSS o segment de dades). Sigui com sigui el cas, tots els membres de l'estructura haurien de residir al mateix segment de memòria perquè el valor de l'element de l'estructura s'obté comptant el desplaçament de l'element des de l'adreça inicial de l'estructura. Separar un membre sol a un segment de dades anul·la el propòsit de l'estructura i és possible tenir una estructura sencera com a estàtica.
Articles relacionats:
- Paraula clau estàtica en C++
- Test sobre paraula clau estàtica
- Membres de dades estàtiques en C++
- Quan es destrueixen els objectes estàtics?
- Dades interessants sobre les funcions membre estàtiques
- Les funcions estàtiques poden ser virtuals?
- Comparació de paraules clau estàtiques en C++ i Java
- Funcions estàtiques en C