El papel de la palabra clave estática c
En lenguaje C, el significado literal de estático puede llevarnos fácilmente por mal camino. De hecho, tiene tres funciones.
(1) Primero introduzcamos el primero y más importante: ocultar.
Cuando compilamos varios archivos al mismo tiempo, todas las variables y funciones globales sin el prefijo estático tienen visibilidad global. Para entender esta frase, permítanme ilustrarla con un ejemplo. Necesitamos compilar dos archivos fuente al mismo tiempo, uno es a.c y el otro es main.c.
El siguiente es el contenido de a.c
Copia el código de la siguiente manera:
char a = 'A' // variable global
void msg()
{
printf("Hola\n");
}
El siguiente es el contenido. de main.c
Copia el código de la siguiente manera:
int main(void)
{
extern char a; la variable externa debe declararse antes de su uso
printf("c ", a);
(void)msg();
return
}
El resultado de la ejecución del programa es:
Un Hola
Puedes preguntar: ¿Por qué se pueden definir la variable global a y la función msg? en a.c ser usado en main.c usado en? Como se mencionó anteriormente, todas las variables y funciones globales sin el prefijo estático tienen visibilidad global y también se puede acceder a ellas desde otros archivos fuente. En este ejemplo, a es una variable global y msg es una función, y no tienen el prefijo static, por lo que son visibles para otro archivo fuente main.c.
Si se agrega estática, se ocultará de otros archivos fuente. Por ejemplo, si se agrega estática antes de la definición de a y msg, main.c no los verá. Esta característica le permite definir funciones y variables con el mismo nombre en diferentes archivos sin preocuparse por conflictos de nombres. Estático se puede utilizar como prefijo para funciones y variables. Para las funciones, la función de estático se limita a ocultar, mientras que para las variables, estático tiene las dos funciones siguientes.
(2) La segunda función de la estática es mantener la persistencia del contenido variable. Las variables almacenadas en el área de datos estáticos se inicializarán cuando el programa comience a ejecutarse por primera vez, que también es el único momento en que se inicializa. *** Hay dos tipos de variables almacenadas en áreas de almacenamiento estáticas: variables globales y variables estáticas. Sin embargo, en comparación con las variables globales, las estáticas pueden controlar el rango visible de variables. Después de todo, las estáticas se usan para ocultar. Aunque este uso es poco común, te daré un ejemplo.
Copia el código de la siguiente manera:
#include lt; stdio.hgt
int fun(void){
static int; count = 10; // De hecho, esta declaración de asignación nunca se ha ejecutado
return count--;
}
int count = 1; p>
int main(void)
{
printf("global\t\tlocal static\n");
for(; contar lt; = 10; contar)
printf("d\t\td\n", contar, diversión()
devolver
}
El resultado de ejecutar el programa es:
estático local global
1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3 p>
9 2
10 1
(3) La tercera función de static es inicializarlo a 0 de forma predeterminada. De hecho, las variables globales también tienen este atributo, porque las variables globales también se almacenan en el área de datos estáticos. En el área de datos estáticos, el valor predeterminado de todos los bytes en la memoria es 0x00. En algunos casos, esta característica puede reducir la carga de trabajo del programador. Por ejemplo, al inicializar una matriz dispersa, podemos establecer todos los elementos en 0 uno por uno y luego asignar valores a varios elementos que no son 0. Si se define como estático, se omitirá la operación de ponerlo a 0 al principio. Otro ejemplo es que desea utilizar una matriz de caracteres como una cadena, pero le resulta demasiado problemático agregar '\0' al final de la matriz de caracteres cada vez. Si define la cadena como estática, se ahorrará este problema, porque ya es '\0'. También podrías hacer un pequeño experimento para verificarlo.
Copia el código de la siguiente manera:
#include lt; stdio.hgt;
int a;
{
int i;
static char str[10];
printf("entero: d; cadena: (comenzar) ) s(end)", a, str);
return 0;
}
Los resultados de ejecución del programa son los siguientes
Copiar código El código es el siguiente:
integer: 0; string: (begin)(end)
Finalmente, resuma las tres funciones de static en una oración. En primer lugar, la función principal de static es ocultar. En segundo lugar, debido a que las variables estáticas se almacenan en un almacenamiento estático, tienen persistencia y un valor predeterminado de 0.
El contenido anterior está escrito por el Sr. Write de Blog Park. Es muy claro y fácil de entender y se puede archivar para su revisión.
La siguiente es una pregunta de la prueba escrita de ZTE de 2012 para el reclutamiento escolar:
1. ¿Cuál es la diferencia entre variables globales estáticas y variables globales ordinarias?
Global La descripción de una variable (variable externa) está precedida por estática para formar una variable global estática.
Las variables globales en sí mismas son métodos de almacenamiento estático y, por supuesto, las variables globales estáticas también son métodos de almacenamiento estático. No hay diferencia entre los dos en la forma en que se almacenan.
La diferencia entre los dos es que el alcance de las variables globales no estáticas es todo el programa fuente. Cuando un programa fuente consta de varios archivos fuente, las variables globales no estáticas son válidas en cada archivo fuente. de. Las variables globales estáticas limitan su alcance, es decir, solo son válidas dentro del archivo fuente en el que está definida la variable y no se pueden usar en otros archivos fuente del mismo programa fuente. Dado que el alcance de las variables globales estáticas está limitado a un archivo fuente y solo puede ser compartido por funciones en ese archivo fuente, se pueden evitar errores en otros archivos fuente.
Las variables globales estáticas solo se inicializan una vez para evitar que se haga referencia a ellas en otras unidades de archivos;
2. ¿Cuál es la diferencia entre las variables locales estáticas y las variables locales ordinarias?
Después de cambiar una variable local a una variable estática, cambia su método de almacenamiento y cambia su vida útil. Cambiar una variable global a una variable estática cambia su alcance y limita su alcance de uso.
Las variables locales estáticas solo se inicializan una vez, y la próxima vez se basa en el valor del resultado anterior;
3. ¿Cuál es la diferencia entre funciones estáticas y funciones ordinarias?
El alcance de las funciones estáticas es diferente de las funciones ordinarias, solo en este archivo. Las funciones utilizadas solo en el archivo fuente actual deben describirse como funciones internas (funciones modificadas estáticamente), y las funciones internas deben describirse y definirse en el archivo fuente actual. Para las funciones que se pueden usar fuera del archivo fuente actual, deben indicarse en un archivo de encabezado, y los archivos fuente que usan estas funciones deben incluir este archivo de encabezado.