C Arreglos

El lenguaje C admitearreglosEstructura de datos que puede almacenar una colección secuencial de elementos del mismo tipo de tamaño fijo. Los arreglos se utilizan para almacenar una serie de datos, pero a menudo se consideran una serie de variables del mismo tipo.

Declarar un arreglo no es declarar variables individuales, como ejemplo0, ejemplo1, ..., ejemplo99, sino declarar una variable de tipo arreglo, como ejemplo, y luego usar ejemplo

Todos los arreglos están compuestos por ubicaciones de memoria contiguas. La dirección más baja corresponde al primer elemento, y la dirección más alta corresponde al último elemento.

C 中的数组

Los elementos específicos de un arreglo se pueden acceder mediante un índice; el valor del primer índice es0。

El lenguaje C también nos permite usar punteros para manejar arreglos, lo que hace que las operaciones sobre arreglos sean más flexibles y eficientes.

Declaración de arreglos

En C, para declarar un arreglo, se necesita especificar el tipo de los elementos y la cantidad de elementos, como se muestra a continuación:

type arrayName [ arraySize ];

Esto se llama un arreglo unidimensional.arraySizeDebe ser una constante entera mayor que cero,typePuede ser cualquier tipo de dato C válido. Por ejemplo, para declarar un arreglo de tipo double que contenga 10 elementosbalance, la declaración es la siguiente:

double balance[10];

Ahorabalancees un arreglo utilizable que puede contener 10 números de tipo double.

Inicialización de arreglos

En C, puede inicializar un arreglo individualmente, o también puede usar una instrucción de inicialización, como se muestra a continuación:

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

El número de valores entre llaves { } no puede ser mayor que el número de elementos que especificamos entre corchetes [ ] al declarar el arreglo.

Si usted omite el tamaño del arreglo, el tamaño del arreglo será el número de elementos durante la inicialización. Por lo tanto, si:

double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

Usted creará un arreglo que es exactamente igual al arreglo creado en el ejemplo anterior. A continuación se muestra un ejemplo de asignar un valor a un elemento del arreglo:

balance[4] = 50.0;

La declaración anterior asigna el valor 50.0 al quinto elemento del arreglo. Todos los arreglos usan 0 como índice de su primer elemento, también conocido como índice base; el último índice de un arreglo es el tamaño total del arreglo menos 1. La siguiente es una representación gráfica del arreglo discutido anteriormente:

数组表示

La siguiente figura es un arreglo de longitud10cuyo primer elemento tiene un índice de0, el noveno elementoejemplotiene un índice de8:

Acceso a los elementos de un arreglo

Los elementos de un arreglo se pueden acceder mediante el nombre del arreglo más un índice. El índice del elemento se coloca entre corchetes, después del nombre del arreglo. Por ejemplo:

double salary = balance[9];

La declaración anterior asignará el valor del décimo elemento del arreglo a la variable salary. El siguiente ejemplo utiliza los tres conceptos mencionados anteriormente, es decir, declarar un arreglo, asignar valores a un arreglo y acceder a un arreglo:

Ejemplo

#include <stdio.h> int main () { int n[ 10 ]; /*n es un arreglo que contiene 10 enteros.*/ int i,j; /*Inicializar los elementos del arreglo*/ for ( i = 0; i < 10; i++ ) { n[ i ] = i + 100; /*Establecer el elemento i como i + 100*/ } /*Imprimir el valor de cada elemento del arreglo*/ for (j = 0; j < 10; j++ ) { printf("Element[%d] = %d\n", j, n[j] ); } return 0; }

Cuando el código anterior se compila y se ejecuta, produce el siguiente resultado:

Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

Obtener la longitud del arreglo

La longitud del arreglo se puede obtener usandosizeofel operador para obtener la longitud del arreglo, por ejemplo:

int numbers[] = {1, 2, 3, 4, 5};
int length = sizeof(numbers) / sizeof(numbers[0]);

Ejemplo

#include <stdio.h>

int main() {
    int array[] = {1, 2, 3, 4, 5};
    int length = sizeof(array) / sizeof(array[0]);

    printf("La longitud del arreglo es: %d\n", length);

    return 0;
}

Usando una definición de macro:

Ejemplo

#include <stdio.h>

#define LENGTH(array) (sizeof(array) / sizeof(array[0]))

int main() {
    int array[] = {1, 2, 3, 4, 5};
    int length = LENGTH(array);

    printf("La longitud del arreglo es: %d\n", length);

    return 0;
}

El resultado del ejemplo anterior es:

数组长度为: 5

Nombre del arreglo

En C, el nombre del arreglo representa la dirección del arreglo, es decir, la dirección del primer elemento del arreglo. Cuando declaramos y definimos un arreglo, ese nombre de arreglo representa la dirección del arreglo.

Por ejemplo, en el siguiente código:

int myArray[5] = {10, 20, 30, 40, 50};

Aquí, myArray es el nombre del arreglo, que representa un arreglo de tipo entero que contiene 5 elementos. myArray también representa la dirección del arreglo, es decir, la dirección del primer elemento.

El nombre del arreglo en sí mismo es un puntero constante, lo que significa que su valor no se puede cambiar; una vez determinado, no puede apuntar a otro lugar.

Podemos usar el operador & para obtener la dirección del arreglo, como se muestra a continuación:

int myArray[5] = {10, 20, 30, 40, 50};
int *ptr = &myArray[0]; // 或者直接写作 int *ptr = myArray;

En el ejemplo anterior, la variable puntero ptr se inicializa con la dirección de myArray, es decir, la dirección del primer elemento del arreglo.

Es importante tener en cuenta que, aunque el nombre del arreglo representa la dirección del arreglo, en la mayoría de los casos el nombre del arreglo se convierte automáticamente en un puntero al primer elemento del arreglo. Esto significa que podemos usar directamente el nombre del arreglo en operaciones de puntero, por ejemplo, al pasar parámetros a una función o al recorrer un arreglo:

Ejemplo

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]); // El nombre del arreglo arr se usa como puntero
    }
}

int main() {
    int myArray[5] = {10, 20, 30, 40, 50};
    printArray(myArray, 5); // Pasar el nombre del arreglo a la función
    return 0;
}

En el código anterior, la función printArray acepta un arreglo de enteros y el tamaño del arreglo como parámetros. Pasamos el nombre del arreglo myArray a la función, y dentro de la función se puede usar el nombre del arreglo arr como si fuera un puntero.

Explicación detallada de los arreglos en C

En C, los arreglos son muy importantes, y necesitamos conocer más detalles sobre ellos. A continuación se enumeran algunos conceptos importantes relacionados con los arreglos que los programadores de C deben tener claros:

ConceptoDescripción
Arreglos multidimensionalesC admite arreglos multidimensionales. La forma más simple de arreglo multidimensional es el arreglo bidimensional.
Pasar arreglos a funcionesPuede pasar a una función un puntero al arreglo especificando el nombre del arreglo sin índice.
Devolver un arreglo desde una funciónC permite devolver un arreglo desde una función.
Punteros a arreglosPuede generar un puntero al primer elemento del arreglo especificando el nombre del arreglo sin índice.
Arreglos estáticos y dinámicosLos arreglos estáticos se asignan en memoria en tiempo de compilación y su tamaño es fijo, mientras que los arreglos dinámicos se asignan manualmente en tiempo de ejecución y su tamaño es variable.
Otras extensiones