[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