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
- Dentro de la función,
sizeofmide el puntero, no el arreglo. - Quien llama debe pasar el número de elementos por separado.
- En el sitio de la definición, en cambio,
sizeofsí ve el arreglo.
Palabras clave y builtins usados aquí
constforintreturnsize_tsizeofstaticvoid
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.
Paso 4 de 5 en Punteros; paso 4 de 25 en Punteros y memoria.