determinar el tamaño de la matriz si se pasa a la función

Resuelto Charles Khunt asked hace 15 años • 10 respuestas

¿Es posible determinar el tamaño de una matriz si se pasó a otra función (no se pasa el tamaño)? La matriz se inicializa como int array[] = { XXX } ..

Entiendo que no es posible hacer sizeof ya que devolverá el tamaño del puntero. La razón por la que pregunto es porque necesito ejecutar un bucle for dentro de la otra función donde se pasa la matriz. Intenté algo como:

for( int i = 0; array[i] != NULL; i++) {
........
}

Pero noté que en el extremo cercano de la matriz, la matriz [i] a veces contiene valores basura como 758433, que no es un valor especificado en la inicialización de la matriz.

Charles Khunt avatar Jun 09 '09 10:06 Charles Khunt
Aceptado

Las otras respuestas pasan por alto una característica de C++. Puede pasar matrices por referencia y utilizar plantillas:

template <typename T, int N>
void func(T (&a) [N]) {
    for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements
}

entonces puedes hacer esto:

int x[10];
func(x);

pero tenga en cuenta que esto solo funciona para matrices , no para punteros.

Sin embargo, como han señalado otras respuestas, usar std::vectores una mejor opción.

Evan Teran avatar Jun 09 '2009 04:06 Evan Teran

Si está bajo su control, use un contenedor STL como un vector o deque en lugar de una matriz.

Fred Larson avatar Jun 09 '2009 03:06 Fred Larson