¡Las variables estáticas tienen la propiedad de preservar su valor incluso después de que estén fuera de su alcance! Por lo tanto, una variable estática conserva su valor anterior en su ámbito anterior y no se inicializa nuevamente en el nuevo ámbito.
Sintaxis:
static data_type var_name = var_value;>
A continuación se presentan algunos datos interesantes sobre las variables estáticas en C:
gimp guardar como jpeg
1) Una variable int estática permanece en la memoria mientras se ejecuta el programa. Una variable normal o automática se destruye cuando finaliza una llamada a una función donde se declaró la variable.
Por ejemplo, podemos usar static int para contar la cantidad de veces que se llama a una función, pero no se puede usar una variable automática para este propósito.
Ejemplo
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;> }> |
>
>Producción
1 2>
El programa anterior imprime 1 2 porque las variables estáticas solo se inicializan una vez y permanecen activas hasta el final del programa. Es por eso que pueden conservar su valor entre múltiples llamadas a funciones.
Probemos el mismo código para la variable automática local.
Ejemplo
fusionar ordenación en 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;> }> |
>
>Producción
1 1>
2) A las variables estáticas se les asigna memoria en el segmento de datos, no en el segmento de pila. Ver el Diseño de memoria de programas C. para detalles.
3) Las variables estáticas (como las variables globales) se inicializan como 0 si no se inicializan explícitamente. Por ejemplo, en el siguiente programa, el valor de x se imprime como 0, mientras que el valor de y es algo basura. Ver este para más detalles.
.06 como fracción
Ejemplo
C
// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d
%d'>, x, y);> }> |
>
>
Producción
0 [some_garbage_value]>
4) En C, las variables estáticas sólo se pueden inicializar utilizando literales constantes. Por ejemplo, el siguiente programa falla en la compilación. Ver este para más detalles.
texto de ajuste css
Ejemplo
C
¿Qué es correo electrónico?
#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }> |
>
>
Producción
In function 'main': 9:5: error: initializer element is not constant static int i = initializer(); ^>
Nota: Tenga en cuenta que esta condición no se cumple en C++. Entonces, si guarda el programa como un programa C++, se compilará y ejecutará bien.
5) Las variables y funciones globales estáticas también son posibles en C/C++. El propósito de estos es limitar el alcance de una variable o función a un archivo. Por favor refiérase a Funciones estáticas en C para más detalles.
6) Las variables estáticas no deben declararse dentro de una estructura. La razón es que el compilador de C requiere que todos los elementos de la estructura se coloquen juntos (es decir, la asignación de memoria para los miembros de la estructura debe ser contigua). Es posible declarar la estructura dentro de la función (segmento de pila) o asignar memoria dinámicamente (segmento de montón) o incluso puede ser global (BSS o segmento de datos). Cualquiera que sea el caso, todos los miembros de la estructura deben residir en el mismo segmento de memoria porque el valor del elemento de la estructura se obtiene contando el desplazamiento del elemento desde la dirección inicial de la estructura. Separar un solo miembro en un segmento de datos anula el propósito de la estructura y es posible tener una estructura completa como estática.
Artículos relacionados:
- Palabra clave estática en C++
- Prueba sobre palabras clave estáticas
- Miembros de datos estáticos en C++
- ¿Cuándo se destruyen los objetos estáticos?
- Datos interesantes sobre funciones miembro estáticas
- ¿Pueden las funciones estáticas ser virtuales?
- Comparación de palabras clave estáticas en C++ y Java
- Funciones estáticas en C