[C con Clase] mas dudas sobre matrices y punteros

Steven Davidson steven en conclase.net
Lun Feb 12 19:22:41 CET 2007


Hola Francesc,

El pasado 2007-02-09 18:44:57, Francesc Cabecerans escribió:

FC> Esto es cierto, sin embargo la idea és que la subrutina trabaje sin saber 
FC> cual es la matriz elegida, por eso en la función main introducía un puntero 
FC> al primer elemento de la matriz "ELEGIDA".
FC> La idea és que la subrutina trabaje sin saber cual es la matriz 
FC> seleccionada!!

Sin saber algunos detalles más de tu función, no te puedo dar una solución exacta. Según expusiste en tu primer mensaje, el prototipo de la función en cuestión es:

<tipo> funcion( void );

Con esto, no podemos saber exactamente los datos de entrada ni de salida. Según nos has comentado, quieres pasar una matriz ya elegida. Esto sería algo así,

void funcion( char mat[][10][30], int pos_x, int pos_y );

Ahora, la función puede manejar la matriz con 'mat'. Al llegar al paso de copiar las cadenas de caracteres, haríamos algo así,

void funcion( char mat[][10][30], int pos_x, int pos_y )
{
  char cadena_de_caracteres;
  ...
  strcpy( cadena_de_caracteres, mat[pos_x][pos_y] );
  ...
}

Para invocar esta función con los datos correctos, hacemos lo siguiente, por ejemplo,

int main()
{
  ...
  funcion( matriz5, 10, 20 );
  funcion( matriz9, 41, 3 );
  ...
}

FC> Otras alternativas que había barajado son:
FC> Pasar a la funcion un entero y en esa funcion mediante un switch trabajar 
FC> con cada casilla de la matriz, sin embargo eso obliga a repetir el código un 
FC> montón de veces.
FC> O bien podria volcar la matriz elegida en una matriz inicialmente vacía en 
FC> la función main, y que la subrutina trabaje con esta matriz "estandar",
FC> però ambas soluciones se me antojan un tanto "groseras"
FC> No se le ocurre alguna manera de "engañar" a strcpy, o strcat con el 
FC> puntero?

No sé a qué te refieres con "engañar". Estas dos funciones trabajan con cadenas de caracteres, no con matrices. Quizás el problema esté en tu definición de "matriz". En tu ejemplo, podemos establecer varias matrices como son 'matriz1', 'matriz2', 'matriz3', etc. al igual que 'matriz1[0]', 'matriz2[32]', 'matriz7[40]', etc.. Algunas personas también hablan de matrices para los arrays de una dimensión como pueden ser los casos: 'matriz3[18][6]', 'matriz6[29][1]', etc..

Por estas razones, sugiero usar el término de "array" para los de una dimensión. Si se trata de arrays de mayores dimensiones, entonces haría falta indicar las cantidades.


Espero que todo esto te sirva.

Steven


Más información sobre la lista de distribución Cconclase