typestar

Los arreglos decaen a punteros en C

Un argumento de arreglo es en realidad un puntero; por eso la función necesita la longitud.

#include <stdio.h>

static void inside(int values[]) {
    printf("in the callee: %zu\n", sizeof(values));
}

int sum(const int *values, size_t n) {
    int total = 0;
    for (size_t i = 0; i < n; i++) {
        total += values[i];
    }
    return total;
}

void decay(void) {
    int numbers[6] = {1, 2, 3, 4, 5, 6};
    size_t count = sizeof(numbers) / sizeof(numbers[0]);

    printf("at the definition: %zu, count %zu\n", sizeof(numbers), count);
    inside(numbers);
    printf("sum %d\n", sum(numbers, count));
}

Cómo funciona

  1. Dentro de la función, sizeof mide el puntero, no el arreglo.
  2. Quien llama debe pasar el número de elementos por separado.
  3. En el sitio de la definición, en cambio, sizeof sí ve el arreglo.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
22
Caracteres a escribir
472
Tokens
151
Ritmo de tres estrellas
90 tpm

Al ritmo de tres estrellas de 90 tokens por minuto, este intento toma unos 101 segundos.

Escribe este fragmento

Paso 4 de 5 en Punteros; paso 4 de 25 en Punteros y memoria.

← Anterior Siguiente →