English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Las variables estáticas son variables que se mantienen en la memoria durante la ejecución del programa, es decir, su ciclo de vida es el tiempo total de ejecución del programa. Esto es diferente de las variables automáticas, que solo se mantienen en la memoria durante la ejecución de la función y se destruyen al final de la función.
Las variables estáticas se almacenan en el segmento de datos de la memoria. El segmento de datos es una parte del espacio de direcciones virtuales del programa.
Todas las variables estáticas que no se inicializan explícitamente o se inicializan a cero se almacenan en el segmento de datos no inicializados (también conocido como segmento BSS). En contraste, las variables estáticas inicializadas se almacenan en el segmento de datos inicializados.
Un ejemplo es el siguiente:
static int x = 5; static int y; La variable estática x se almacena en el segmento de datos inicializados y la variable estática y se almacena en el segmento BSS.
El programa que muestra el uso de la variable estática en el lenguaje C se muestra a continuación-
#include<stdio.h> int func() { static int i = 4 ; i++; return i; } int main() { printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); return 0; }
La salida del programa anterior es como sigue-
5 6 7 8 9 10
Ahora, vamos a entender el programa anterior.
Dentro de esta funciónfunc()
i se inicializa en4La variable estática. Por lo tanto, se almacena en el segmento de datos inicializados. Luego, i se incrementa y se devuelve su valor. Aquí tienes el segmento de código para mostrarlo-
int func() { static int i = 4 ; i++; return i; }
Dentro de la funciónmain()
La funciónfunc()
Llamado6Vuelva, y devuelva el valor de i que se va a imprimir. Dado que i es una variable estática, se mantendrá en la memoria durante la ejecución del programa y proporcionará un valor consistente. Aquí tienes el segmento de código para mostrarlo-
printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func()); printf("%d\n", func());