C Array estático del lenguajeyArray dinámico
En C, hay dos tipos de arrays:
- Array estático: la memoria se asigna en tiempo de compilación y su tamaño es fijo.
- Array dinámico: la memoria se asigna manualmente en tiempo de ejecución y su tamaño es variable.
El ciclo de vida de un array estático está relacionado con su ámbito, mientras que el ciclo de vida de un array dinámico está controlado por el programador.
Al usar arrays dinámicos, hay que tener cuidado de asignar y liberar memoria de forma adecuada para evitar pérdidas de memoria y accesos a memoria no válida.
Array estático
Un array estático es aquel cuyo tamaño se determina en tiempo de compilación y no puede modificarse durante la ejecución del programa.
En C, la memoria de un array estático se asigna en la pila; normalmente se usan corchetes[]para definirlo.
Las características de los arrays estáticos incluyen:
- Asignación de memoria: la memoria de un array estático se asigna normalmente en la pila y se gestiona automáticamente con las llamadas y retornos de las funciones.
- Tamaño fijo: el tamaño se especifica en la definición y no se puede cambiar durante la ejecución del programa.
- Eficiencia: al asignar memoria en la pila, el acceso es más rápido.
- Ciclo de vida: el ciclo de vida de un array estático comienza en su definición. Si se define dentro de una función, su ciclo de vida coincide con la llamada a la función; si se define en el ámbito global, su ciclo de vida abarca toda la ejecución del programa.
Ejemplo de declaración e inicialización de un array estático:
int staticArray[5]; // 静态数组声明
int staticArray[] = {1, 2, 3, 4, 5}; // 静态数组声明并初始化Para arrays estáticos, se puede usar el operador sizeof para obtener la longitud del array, por ejemplo:int array[] = {1, 2, 3, 4, 5};
int length = sizeof(array) / sizeof(array[0]);En el código anterior, sizeof(array) devuelve el número de bytes que ocupa todo el array, mientras que sizeof(array
Lo anterior es un ejemplo sencillo de array estático:
Ejemplo
int main() {
int staticArray[] = {1, 2, 3, 4, 5}; // Declaración e inicialización de array estático
int length = sizeof(staticArray) / sizeof(staticArray[0]);
printf(Array estático:);
for (int i = 0; i < length; i++) {
printf("%d ", staticArray[i]);
}
printf("\n");
return 0;
}
En el ejemplo anterior, declaramos e inicializamos un array estático, staticArray, que contiene 5 elementos enteros. Luego, mediante el operador sizeof, calculamos la longitud del array y usamos un bucle para recorrer e imprimir los elementos del array.
Salida:
静态数组: 1 2 3 4 5
Array dinámico
Un array dinámico es un array que, en tiempo de ejecución, mediante funciones de asignación dinámica de memoria (comomallocycalloc), asigna memoria manualmente.
Las características de los arrays dinámicos son las siguientes:
- Asignación de memoria: el espacio de memoria de un array dinámico se asigna manualmente en tiempo de ejecución mediante funciones de asignación dinámica de memoria y se almacena en el montón. Es necesario usar
malloc、callocfunciones como estas para solicitar memoria, y usarfreela función para liberar memoria. - Tamaño variable: el tamaño de un array dinámico se puede ajustar en tiempo de ejecución según sea necesario. Se puede usar
reallocla función para reasignar memoria y cambiar el tamaño del array. - Ciclo de vida: el ciclo de vida de un array dinámico está controlado por el programador. Es necesario liberar la memoria manualmente después de usar el array para evitar pérdidas de memoria.
Ejemplo de declaración, asignación y liberación de memoria de un array dinámico:
int size = 5; int *dynamicArray = (int *)malloc(size * sizeof(int)); // 动态数组内存分配 // 使用动态数组 free(dynamicArray); // 动态数组内存释放
Para un array asignado dinámicamente, se puede guardar la longitud del array al asignar la memoria dinámicamente y usar esa longitud cuando sea necesario, por ejemplo:
int size = 5; // 数组长度 int *array = malloc(size * sizeof(int)); // 使用数组 free(array); // 释放内存
En el código anterior, usamos la función malloc para asignar dinámicamente un array de enteros y guardamos la longitud en la variable size. Luego podemos usar esa longitud para realizar operaciones según sea necesario; después de usar el array, usamos la función free para liberar la memoria.
Nota:El uso de arrays dinámicos requiere atención en la gestión de memoria; asegúrese de liberar la memoria cuando ya no se necesite el array, para evitar pérdidas de memoria y el acceso a ubicaciones de memoria no válidas.
Lo anterior es un ejemplo sencillo de uso de un array dinámico:
Ejemplo
#include <stdlib.h>
int main() {
int size = 5;
int *dynamicArray = (int *)malloc(size * sizeof(int)); // Asignación de memoria para array dinámico
if (dynamicArray == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
printf("Enter %d elements: ", size);
for (int i = 0; i < size; i++) {
scanf("%d", &dynamicArray[i]);
}
printf("Dynamic Array: ");
for (int i = 0; i < size; i++) {
printf("%d ", dynamicArray[i]);
}
printf("\n");
free(dynamicArray); // Liberación de memoria del array dinámico
return 0;
}
En el ejemplo anterior, primero declaramos una variable size para especificar el tamaño del array dinámico.
Luego usamos la función malloc para asignar memoria al array dinámico, y calculamos el tamaño de memoria necesario mediante el operador sizeof.
A continuación, mediante un bucle y la función scanf, leemos los valores de los elementos de la entrada del usuario y los almacenamos en el array dinámico.
Finalmente, usamos un bucle para recorrer e imprimir los elementos del array dinámico. Al final del programa, usamos la función free para liberar la memoria ocupada por el array dinámico.
Tenga en cuenta que, al usar arrays dinámicos, debe comprobar si la asignación de memoria fue exitosa (es decir, si dynamicArray es NULL), para evitar errores cuando falla la asignación de memoria.
Otras extensiones
Arrays en C