[C con Clase] Problema conceptual al pasar por referencia array de 2 dimensiones en C

Programante programante en gmail.com
Mar Jun 16 01:31:13 CEST 2015


El 11/06/15 20:30, Diego escribió:
> Hola Horacio, muchas gracias por la ayuda.
>
> Esos dos artículos tratan sobre arrayes unidimensionales, se entienden 
> y no radica ahí el problema.
>
> Mi problema / duda surge al intentar interpretar la forma correcta en 
> que debería pasarle un array bidimensional a una función, ya que el 
> compilador lo interpreta como un puntero doble (si en el prototipo 
> declaro que es un puntero simple, da Warning) pero si lo utilizo como 
> puntero doble da error, ya que no es un puntero a punteros sinó que 
> apunta a direcciones contiguas de memoria con el contenido de los 
> datos en forma ordenada, según la posición mas el índice. Es decir, a 
> mi entender, el compilador entiende que es un puntero doble pero lo 
> trata como uno simple y ahí aparecen mis confusiones.
>
> La solución especificando que tipo entradas exige y haciendo casting 
> de variables, ya sea antes o después de la función, pero estoy seguro 
> que estoy haciendo algo mal y que hay una explicación y una solución 
> mas elegante y correcta.
(...)
> El problema es que mediante las técnicas que se me ocurren, siempre 
> tengo que castearlo para evitar errores y eso me hace pensar que estoy 
> haciendo las cosas mal, o que tengo un error conceptual. Es así?
>
> Saludos y gracias
> Diego
La hay. Los warnings del compilador te están volviendo loco :)


El prototipo Pasar(float **numeros); también da warning:
> aviso: se pasa el argumento 1 de ‘Pasar’ desde un tipo de puntero 
> incompatible [-Wincompatible-pointer-types]
> Pasar(numeros);
> ^
> nota: se esperaba ‘float *’ pero el argumento es de tipo ‘float (*)[5]’
> void Pasar(float *numeros) {

Lo que puedes hacer es utilizar:
> void Pasar(float numeros[5][5])

[otra opción sería void Pasar(float (*numeros)[5]) pero resulta mucho 
menos claro]

Un saludo




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