Capítulo 12 categorías de la tienda, enlaces y la gestión de memoria

En primer lugar, el alcance

1.1 Alcance

Definición de variables dentro del bloque que tiene un ámbito de bloque, el bloque está encerrada entre llaves región de código.

alcance 1.2 Función

Ámbito de una función única para etiquetar Goto comunicado.

1.3 Función alcance prototipo

Rango del ámbito de la función prototipo es definir una referencia a la forma de declaración de prototipo a partir del final . Esto significa que el compilador en el trato con el parámetro de la función prototipo única en su tipo, dos nombres de los parámetros son generalmente irrelevantes. Además, incluso si el nombre del parámetro físico, parámetros no coinciden con el nombre de la definición de la función. Sólo la matriz de longitud variable, solamente un nombre de parámetro. Tales como: use_a_VLA void (int n, int m, Ar [n] [m])

alcance 1,4 archivo

Las definiciones de las variables fuera de la función, el archivo que tiene un ámbito de aplicación. Tales variables se pueden utilizar para una pluralidad de funciones, que también se conoce como una variable global.

Unidad 1.5 Traducción

C preprocesador comando # include es en realidad sustituyen por los contenidos que figuran en el archivo de cabecera. Por lo tanto, el código fuente del compilador y todos los archivos de cabecera son vistos como un solo archivo que contiene la información, este archivo se denomina unidades de traducción.

En segundo lugar, el enlace

2.1 No hay enlace

Un bloque que tiene un ámbito de aplicación, la función o prototipo de función variables de ámbito alcance no está encadenando variable.

2.2 Enlaces

Las variables tienen el ámbito de archivo puede ser enlaces internos o externos Enlaces.

2.2.1 Enlaces Internos

variables de enlace internos sólo se pueden utilizar en una unidad de traducción, enlaces internos ámbito de archivo, también conocido como "el ámbito de archivo."

2.2.2 Enlaces externos

variables de enlaces externos se pueden utilizar en varios archivos, enlaces externos ámbito de archivo también conocido como "ámbito global" o "alcance".

En tercer lugar, el período de almacenamiento

3.1 Duración del almacenamiento automático

** variables de ámbito bloque tienen típicamente período de almacenamiento automático. ** Cuando el programa entra en definiciones de bloque de estas variables, se asigna memoria para estas variables, cuando se sale del bloque, simplemente libera la memoria asignada para la variable.

3,2 período de almacenamiento estático

variables de ámbito archivo con una duración de almacenamiento estático.

Nota: palabra clave static indica sus atributos de enlace, en lugar del período de almacenamiento. Hay aspectos internos vínculos de palabras clave estática.

período de almacenamiento 3,3 hilo

Los objetos tienen período de almacenamiento de hilo desde el extremo de la rosca se haya declarado que presente.

3.4 Dinámica asignación de memoria

Utilice una memoria asigna la función de asignación variable.

En cuarto lugar, la categoría de almacenamiento

4.1 Resumen

Clase de almacenamiento período de almacenamiento alcance enlace declarativa
automático automático bloque no el bloque
Registro automático bloque no Bloque, registro de palabras clave
enlaces estáticos externos El estado estático expediente fuera Toda función externa
enlaces internos estáticos El estado estático expediente interna Fuera de todas las funciones, utilice la palabra clave static
Sin enlace estática El estado estático bloque no Dentro rápido, utilizar la palabra clave static

4.2 Características

4.2.1 Registro de variables

En comparación con la variable de registro variable automática, que se almacena en la memoria más rápida disponible. Debido a la presencia de los registros de la variable de registro en lugar de la memoria, por lo que no puede obtener las variables de registro de direcciones.

Puede ser declarado como un tipo variable de registro está limitado, debido a que los registros pueden no ser suficiente espacio para almacenar la variable de 64 bits.

4.2.2 Las variables estáticas

Las variables estáticas son in situ de memoria no se mueve, en lugar de su valor sin cambios.

Hay bloques de variables estáticas variables estáticas, variables estáticas enlaces externos, enlaces internos de las variables estáticas.

Ejemplo:

#include <stdio.h>

int staticdemo(void);

int main(void)
{
        int i;

        for(i = 0; i < 10; i++)
                printf("%d ", staticdemo());	//调用声明静态变量的函数
		
   		 /*运行结果
		1 2 3 4 5 6 7 8 9 10 
		*/
        return 0;
}

int staticdemo(void)
{
        static int demo = 0;	//声明静态变量

        return ++demo;
}

Los resultados:

Declaración en la primera staticdemo llamada () y variables estáticas se inicializan a 0, y luego después de la función se llama, no hubiera inicializado de demostración, porque la cantidad de memoria que se pueden utilizar directamente.

4.2.3 estáticas enlaces externos variables

Si una variable externa fuente definida en otro archivo que se utiliza en el archivo de código fuente, debe utilizar el archivo externo entonces la variable se declara.

/*file1.c*/
int exVal = 100;
int exVal2 = 200;

/*file2.c*/
#include <stdio.h>
#include "file1.c"
int main(void)
{
        extern int exVal;
    	int exVal2 = 50
        printf("exVal = %d \n", exVal);
        printf("exVal2 = %d \n", exVal2);

        return 0;
}

/*运行结果
exVal = 100
exVal2 = 50
*/

Los resultados:

exVal utilizar la palabra clave extern, el valor de salida se define Archivo1.c y exVal2 no utiliza la palabra clave extern, por lo que el valor de salida se define Archivo2.c.

La primera declaración como declaración de estilo definido, la segunda sentencia, citado declaró que sólo la definición declarada para inicializar variables.

4.2.4 Las variables estáticas conexiones internas

La función normal de las variables externas se puede utilizar en cualquier programa, archivo unificado, pero las variables estáticas para los enlaces internos sólo puede funcionar con un archivo.

Ejemplo:

#include <stdio.h>

static int a = 100;

int main(void)
{
        printf("static val a = %d \n", a);

        return 0;
}
/*输出结果
static val a = 100
*/

4.2.5 variables de almacenamiento dinámico

C puede asignar más memoria (por ejemplo, de longitud variable array), mientras que el programa se ejecuta, también podemos utilizar la función malloc () para asignar memoria. malloc () devuelve una dirección de bloque de memoria asignada dinámicamente del primer byte. Por lo tanto, la dirección puede ser asignada a un puntero, y utilizando el puntero para acceder a esta memoria. Char expresa como un byte, el malloc () se define generalmente como el puntero del tipo de retorno a char, a continuación, escriba fundido en el giro deseado.

Ejemplo:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int i = 0;
	double * ptd = (double *) malloc(5 * sizeof(double));      //声明 5 个空间的double数组
	int * pti = (int *) malloc(3 * sizeof(int));           //声明 10 个长度的int数组

	printf("enter 5 num to assign double arry: \n");
	while (i < 5 && scanf_s("%lf", &ptd[i]) == 1)		//获取 double 输入
		i++;
	printf("here are double arry: \n");
	for (i = 0; i < 5; i++)		//输出
		printf("%7.2f", ptd[i]);
	printf("\n");
    free(ptd);

	i = 0;
	printf("enter 3 num to assign int arry: \n");
	while (i < 3 && scanf_s("%d", &pti[i]) == 1)		//获取 int 输入
		i++;
	printf("here are int arry: \n");
	for (i = 0; i < 3; i++)		//输出
		printf("%d ", pti[i]);
    free(pti);

	return 0;
}

/*运行结果
enter 5 num to assign double arry:
9 10 4.4 8.9 10
here are double arry:
	9.00  10.00   4.40   8.90  10.00
enter 3 num to assign int arry:
4 9 10
here are int arry:
4 9 10
*/

Los libros de referencia

C Primer Plus (sexta edición) versión china

Publicado 42 artículos originales · ganado elogios 3 · Vistas 2088

Supongo que te gusta

Origin blog.csdn.net/stable_zl/article/details/104094609
Recomendado
Clasificación