Duplicar posibles:
How to find the sizeof(a pointer pointing to an array)C sizeof una matriz pasada
entiendo que el operador sizeof se evalúa y se reemplaza con una constante en tiempo de compilación. Dado que, ¿cómo puede una función, al pasar diferentes matrices en diferentes puntos de un programa, tener su tamaño calculado? Puedo pasarlo como un parámetro a la función, pero prefiero no tener que agregar otro parámetro si no es absolutamente necesario.
He aquí un ejemplo para ilustrar lo que estoy preguntando:
#include <stdio.h>
#include <stdlib.h>
#define SIZEOF(a) (sizeof a/sizeof a[0])
void printarray(double x[], int);
int main()
{
double array1[ 100 ];
printf("The size of array1 = %ld.\n", SIZEOF(array1));
printf("The size of array1 = %ld.\n", sizeof array1);
printf("The size of array1[0] = %ld.\n\n", sizeof array1[0]);
printarray(array1, SIZEOF(array1));
return EXIT_SUCCESS;
}
void printarray(double p[], int s)
{
int i;
// THIS IS WHAT DOESN"T WORK, SO AS A CONSEQUENCE, I PASS THE
// SIZE IN AS A SECOND PARAMETER, WHICH I'D RATHER NOT DO.
printf("The size of p calculated = %ld.\n", SIZEOF(p));
printf("The size of p = %ld.\n", sizeof p);
printf("The size of p[0] = %ld.\n", sizeof p[0]);
for(i = 0; i < s; i++)
printf("Eelement %d = %lf.\n", i, p[i]);
return;
}
Estándar C gotcha - vea el enlace a la pregunta. – Jon
'sizeof' no tiene que evaluarse en tiempo de compilación en C99 - Los VLA funcionan correctamente con' sizeof', y su tamaño solo puede conocerse en tiempo de ejecución. –