¿Cómo se determina la longitud de una matriz en C?

No está claro qué está preguntando, pero supongo que la pregunta es si, dada una matriz, ¿cómo se determina su longitud?

C tiene varios tipos de matrices: matrices de tamaño desconocido, matrices de tamaño constante conocido y matrices de longitud variable.

Para una matriz de tamaño constante, el tamaño es parte de su tipo: la longitud de una matriz cuyo tipo es int[10] es muy 10. C no tiene ningún mecanismo para extraerlo directamente del tipo (a diferencia de C ++), pero usted puede hacerlo indirectamente a través de sizeof:

int a [] = {1,2,3,4,5,6,7,8,9,0};
size_t sz = sizeof a / sizeof * a; // o … / sizeof a [0], lo mismo
printf (“tamaño =% zu \ n”, sz);

El tamaño de una matriz de longitud variable también se puede calcular con sizeof, con código idéntico. En ese caso, se ejecuta en tiempo de ejecución:

scanf (“% d”, & x);
int a [x];
size_t sz = sizeof a / sizeof * a;
printf (“tamaño =% zu \ n”, sz);

Finalmente, las matrices de límite desconocido tienen, por definición, un tamaño desconocido. Tendría que obtenerlo a través de la lógica del programa

extern int a [];
size_t sz = something_from_the_module_that_defines_a ();

Una advertencia, por supuesto, las matrices desnudas en C no se pueden pasar a las funciones, por lo que los tamaños deben calcularse del lado de la persona que llama y pasarlos por separado:

nulo f (int * a, size_t sz);
int a [] = {1,2,3,4,5,6,7,8,9,0};
f (a, tamaño de a / tamaño de * a);

Las matrices miembro pueden, por supuesto, pasar a funciones por valor:

struct a10 {int a [10];};
nulo f (struct a10 s) {
size_t sz = sizeof sa / sizeof * sa;
}

Probablemente necesites ser más específico que eso. Pero suponiendo que dada una matriz, necesita calcular su longitud, dos de los métodos se dan a continuación:

Usando el operador sizeof

Esta es una de las formas más populares.

size_t size = sizeof arr / sizeof * arr;

Tenga en cuenta que no puede tener la misma lógica para las matrices pasadas a una función (ya que se descomponen en punteros).

Usando aritmética de puntero

size_t size = 1 [& arr] – arr;

*(&arr + 1) refiere a la siguiente ubicación después de la matriz. Por lo tanto, el número de elementos en la matriz es *(&arr + 1) - arr o (&arr)[1] - arr o simplemente 1[&arr] - arr .

La longitud de una matriz? ¿Cía? Tan grande como lo pediste.

De hecho, será mejor que recuerdes cuán grande es y comprueba los límites … de lo contrario, seguirá la “hilaridad”.