Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/12/2010, 13:46
Jonathan_attica
 
Fecha de Ingreso: octubre-2010
Ubicación: madrid
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Problema complejo de arrays bidimensionales y punteros

Hola a todos. Feliz Navidad lo primero.Tengo un problema que espero alguien pueda solucionarme:

(*(*(array+1)+1))=5;

Vale, al meter esto en la función main, funciona. Es decir:
ves a la posición de memoria de array, ya que (array a secas, (sin [2][2])es un puntero que apunta al primer elemento de dicho array). Suma uno a esa posición de memoria. es decir;

si array es la posición de memoria 0001, ahora esta en 0002. Al ser un array bidimensional, en 0002 no hay dato, sino otra dirección de memoria que apuntará a [][x]. Hasta ahí todo bien. es decir en array 0002 se encuentra con 0004. le suma 1, por lo que esta en 0005.(ahora mismo esta en array [1][1]). por ultimo, el asterisco que queda, dice que vaya a esa posición de memoria, en la que ya se encuentra nuestro dato. y lo iguale a 1.

No se si lo e explicado bien pero vamos que esto funciona perfectamente y esta comprobado. El problema es cuando paso esto a una función. no me funciona.

a la función debería pasarlo como array a secas, o como *array? es decir:

iguala_5 (array); ?

o

iguala_5 (*array); ?

de todas formas e probado todas las formas. esta es la función;


int iguala_5(int *a)
{
*(*(a+1)+1)=5;
}


no me funciona pero es q ni siquiera me compila. este es el error que me marca;


C:\Users\Jonna\Desktop\main.c In function `iguala_2':
43 C:\Users\Jonna\Desktop\main.c invalid type argument of `unary *'
C:\Dev-Cpp\Makefile.win [Build Error] [../Users/Jonna/Desktop/main.o] Error 1

He probado a ponerlo así:

*(*(a+1)+1)=5;
*(*(*a+1)+1)=5;
(*(*(a+1)+1))=5;...tampoco funciona.

trabajo con dev-c++. por otro lado deciros que partimos de que esa misma operación en el main sin pasarla por función, no da ningún tipo de error. Es más, opera correctamente en el array.
Necesitaría poder hacer funcionar esto en concreto.

muchas gracias por adelantado si alguien tiene dudas por que lo e explicado mal, no tengo problemas en volver a explicar algo.