C/Visual C - pasar una matriz de tamaño indefinido a un funcion

 
Vista:

pasar una matriz de tamaño indefinido a un funcion

Publicado por el manco (1 intervención) el 28/07/2008 18:24:08
Saludos

como puedo pasar una matrix de tamaño indefinido a una funcion?
si no pongo el tamaño de la matriz de antemano me pone muchos problemas
============
#include <stdio.h>
#include <stdarg.h>

void
print_matrix(int *A[], int size)
{
int i,j;

for (i=0; i < size; i++){
for (j=0; j < size; j++){

printf("%d ", A[i][j]);

}
printf(" ");

}
}

int
main(int argc,char *argv[])
{

int B[5][5] = {0};
print_matrix(B,5);
return(0);
}


========================
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:pasar una matriz de tamaño indefinido a un func

Publicado por igor (22 intervenciones) el 28/07/2008 20:29:06
A ver que te parece esto.

print_matrix(int *A, int size)
{
int i,j;

for (i=0; i < size; i++){
for (j=0; j < size; j++,A++){

printf("%d ", *A);

}
printf(" ");

}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar una matriz de tamaño indefinido a un func

Publicado por m0skit0 (15 intervenciones) el 29/07/2008 14:01:42
print_matrix(int *A[]...

Eso está mal. Estás pasando un puntero a un puntero. Con int A[] te vale, ya que en C los arrays son punteros. Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar una matriz de tamaño indefinido a un func

Publicado por eduardo (82 intervenciones) el 30/07/2008 23:53:26
Haber si te entendí:
Tú no deseas pasar size como parámetro a la función, entonces como recorrerás todo el array para imprimirlo, debe haber alguna forma de terminar el array. Ahora si deseas puedes hacer size como global, aunque no es recomendable, la otra forma es usar una constante simbólica en lugar de size me refiero a algo como esto:
#define SIZE 5
aunque yo te recomiendaría que lo mejor es pasar el tamanio del array como parámetro.
En cuanto a la declaración de tu función:
print_matrix(int *A[], int size)

La entiendo como un array de punteros a int lo cual es incorrecto para tu caso.
Puedes declararla como cualquiera de estas formas:

void print_matrix( int A[ 5 ][ 5 ], const int size )
void print_matrix( int A[][ 5 ], const int size ) o también
void print_matrix( int A[], const int size ) o
void print_matrix( int *ptr_A, const int size )

Para las dos primeras puedes recorrer A de la forma estandar
for ( i = 0; i < size; i++ )
for ( j = 0; j < size; j++ )
printf( "%2d ", A[ i ][ j ] );

Mientras que para las otras 2 tendrias que recorrer el array Bidimensional de forma lineal aunque por ahí que el compilador te muestre un Warning pero es completamente válido para C ya que cuando pasamos un array ya sea de una dimensión o de 2 dimensiones lo que se pasa es la dirección del primer elemento o lo que es lo mismo la dirección del array en si y teniendo esta dirección podemos recorrerlo:

for ( t = 0; t < size * size; t++ )
printf( "%2d ", A[ t ] );

Tambien puedes recorrer usando aritmética de punteros:
for ( t = 0; t < size * size; t++ )
printf( "%2d ", *( ptr_A + t ) );

En esto último el comilador también puede mostrarte Warning. Si deseas que el compilador no te muestre Warning para poder aplicar estas 2 formas tendrías que declarar el array de la forma:
int *A = (int *)malloc( 5 * 5 * sizeof(int) );

A[] y ptr_A son equivalentes así que puedes usarlos de manera indistinta.

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar