Entrada de lenguaje C al maestro C ++: función de entrada de lenguaje C (6)

Capítulo 7 Funciones

Sección 6 Almacenamiento y referencia de variables, funciones internas y funciones externas.

1. Categoría de almacenamiento variable

Desde la perspectiva del tiempo (supervivencia) de las variables, podemos dividir las variables en: variables de almacenamiento estático y variables de almacenamiento dinámico, lo
que conduce a métodos de almacenamiento estático y métodos de almacenamiento dinámico.

  • Variables de almacenamiento estático: variables que asignan espacio de almacenamiento fijo durante la ejecución del programa. Este método de asignación de variables se denomina almacenamiento estático.

  • Variables de almacenamiento dinámico: variables que asignan dinámicamente espacio de almacenamiento durante la ejecución del programa. Este método de asignación de variables se denomina almacenamiento dinámico

  • Variables globales: ubicadas en un área de almacenamiento estático, cuando el programa comienza a ejecutarse, asigna áreas de almacenamiento a variables globales y libera estas áreas de almacenamiento después de que se completa
    la ejecución del programa . Durante la ejecución del programa, ocupa una unidad de almacenamiento fija en lugar de asignarse dinámicamente y Lanzamiento

  • Los datos almacenados en la memoria dinámica
    de un parámetro de función), parámetro de función se considera como una variable local
    b) Variables locales dentro de una función variable definida
    c) un campo de datos y la dirección de retorno de la llamada de función, etc.
    En general, estos Los datos se asignan al comienzo de la llamada a la función, y se asigna espacio de memoria. Después de llamar a la función, estos espacios se liberan. Estas asignaciones y liberaciones son dinámicas.
    Si se llama a la misma función dos veces, el espacio de almacenamiento asignado a la variable local de esta función, etc. La dirección es diferente

2. Cómo se almacenan las variables locales

  • Situación tradicional:
    variables locales de funciones: el espacio de almacenamiento se asigna cuando se llama a la función, y el espacio de almacenamiento ocupado se libera automáticamente después de ejecutar la función
#include <iostream>

void functionTest(){
    int c = 4;
    printf("c = %d\n", c);
    c++;
    return;
}

int main() {
    functionTest();
    functionTest();
    functionTest();
    return 0;
}
  • Caso especial:
    variable estática local: explicada con estática, puede retener el valor original, la unidad de almacenamiento ocupada no se libera
    y el valor de la variable es el valor al final de la última llamada a la función cuando la función se llama la próxima vez

  • Descripción de las variables locales estáticas
    a) La unidad de almacenamiento se asigna en el área de almacenamiento estático, y no se libera durante la ejecución del programa
    b) A la variable estática local se le asigna un valor inicial en tiempo de compilación, y solo se le asigna un valor inicial una vez, ya tiene un valor inicial cuando el programa se está ejecutando,
    Después de que se llama al programa, el valor inicial ya no se reasigna, pero se llama al valor después de la última llamada a la función.
    C) Al definir una variable estática local, si el valor inicial no se asigna, el compilador asigna automáticamente el valor inicial a 0, mientras que la variable local ordinaria , Si no se asigna ningún valor inicial,
    la variable local ordinaria es un valor indeterminado.
    D) Aunque las variables estáticas locales todavía existen después de que finaliza la llamada a la función, no se puede hacer referencia a otras funciones
    e) Desventajas: ocupación a largo plazo de la memoria y un programa inferior Legibilidad
    f) Conclusión: no utilice variables estáticas locales a menos que sea necesario

3. Referencia de archivos cruzados de variables globales

  • extern: Al
    comienzo de la variable global, haga una descripción de la variable externa, indicando que la variable que aparece aquí es una variable externa que se ha definido en otros archivos. Este archivo no necesita asignarle memoria, debe colocarse al principio del archivo, todos Fuera de la función

  • Agregue estática antes de definir la variable global, luego la variable global solo se puede usar en este archivo

4. Llamadas cruzadas de funciones

De acuerdo con la capacidad de ser llamado por otros archivos fuente, las funciones se dividen en funciones internas y funciones externas.

#### Función interna:
solo puede ser invocada por otras funciones en este archivo. Al definir una función interna, agregue una estática antes de la definición de la función, la forma es la siguiente:
nombre de función del identificador de tipo estático (lista de parámetros formales) {…},
interno Las funciones también se denominan "funciones estáticas": utilice funciones internas, que pueden limitarse al archivo

Función externa

Si una definición de función no utiliza estática, es una función externa, también puede agregar extern, pero la función por defecto es modo externo
Nombre de función de identificador de tipo externo (lista de parámetros formales) {…}, puede omitirse extern

Agregue una declaración de función en la cabecera del archivo para usar

5. Resumen del uso de palabras clave estáticas

  • Cuando se usa static cuando se define una variable dentro de la función, la variable se guardará en el área de almacenamiento estático y se inicializará en el momento de la compilación. Si no se inicializa, la variable se inicializará a 0, y la próxima vez que se llame a la función, la variable El valor del resultado de la última llamada.

  • Agregue estática antes de la variable global, de modo que la variable solo se pueda usar en este archivo, no en otros archivos

  • Antes de la definición de la función, agregue static, para que la función solo se pueda invocar en este archivo, no en otros archivos

Publicado 359 artículos originales · elogiado 248 · 660,000 vistas

Supongo que te gusta

Origin blog.csdn.net/Felaim/article/details/105666149
Recomendado
Clasificación