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:
- ¿De dónde debería comenzar a aprender el algoritmo? ¿Debería unirme a uno de los MOOC disponibles o leer libros como 'Introducción a los algoritmos'?
- ¿Qué es la clasificación estable?
- ¿Qué idioma es mejor para comprender la importancia de las estructuras de datos?
- ¿Cuál es la mejor manera de depurar un algoritmo recursivo?
- ¿Qué viene después de aprender la biblioteca de plantillas estándar, las estructuras de datos y los algoritmos en C ++?
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;
}