Foros del Web » Programación para mayores de 30 ;) » C/C++ »

APUNTADORES A ARREGLOS MULTIDIMENSIONALES desde FUNCION

Estas en el tema de APUNTADORES A ARREGLOS MULTIDIMENSIONALES desde FUNCION en el foro de C/C++ en Foros del Web. hola recien acabo de descubrir la manera de poder hacer que podamos a puntar a un arreglo multidimensional desde una funcion o como tambien he ...
  #1 (permalink)  
Antiguo 09/08/2011, 19:44
Avatar de roque510  
Fecha de Ingreso: agosto-2011
Mensajes: 2
Antigüedad: 12 años, 8 meses
Puntos: 0
APUNTADORES A ARREGLOS MULTIDIMENSIONALES desde FUNCION

hola recien acabo de descubrir la manera de poder hacer que podamos a puntar a un arreglo multidimensional desde una funcion o como tambien he visto en otro tema por ahi el impossible retorno de arreglos. pues hace dias yo hice una pregunta con respecto a ese problema se sabe que el retorno de arreglos es IMPOSIBLE almenos... que utilizemos un apuntador des esta manera logramos hacer que el arreglo al que quisieramos retornar lo modificaramos desde una funcion. pus bueno luego de eso tuve el problema que no podia apuntar hacia un arreglo bidimensional! :/ despues de un poco de investigacion lo he descubierto y como nadie me pudo responder mi pregunta solo quiero compartirlo para ayuda de nuestro FORO :D pues es muy facil y es algo asi

#include <conio.h>
#include <stdio.h>

void apuntarre(int [3][3]);
void main(){
int arre[3][3];

apuntarre(arre);

for(int x=0;x<3;x++){
for(int y=0;y<3;y++){
printf("%d",arre[x][y]);

}
printf("\n");
}







getch();
}//fin del main

void apuntarre(int arre[3][3]){
int *ptr,a=0;

ptr=(int*)arre;

for(int x=0;x<9;x++){

ptr[x]=a;
a++;

}


}//fin del apuntarre

si nos fijamos la diferencia es que un apuntador no reconoce el momento en el que un arreglo termina los renglones (asi como puede hacerlo un arreglo) y acordemonos que los arreglos en memoria son organizados de manera lineal que por ejemplo seria algo asi

1,2,3,4,5,6,7,8,9

nosotros vemos un arreglo bidimensional de esta manera

123
456
789

o por lo menos varios de nosotros. estos renglones son los que un apuntador no puede ver(lo que un arreglo si) entonces la manera en que podamos apuntar a un arrgelo de este tipo es seguir contando los desplazamientos del arreglo en el apuntador como si fuese de una sola dimension. lo cual seria como un solo arreglo pero en ves de ser arre [3][3] el apuntador lo veria de esta manera [9] y es asi como podemos modificar un arreglo de este tipo . y de la misma manera se hace con un tipo char .

espero esto ayude un poco a personas como yo que no sabiamos como hacer esto SALUDOS
  #2 (permalink)  
Antiguo 12/08/2011, 22:06
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años
Puntos: 71
Respuesta: APUNTADORES A ARREGLOS MULTIDIMENSIONALES desde FUNCION

Cuando pasas un arreglo bidimensional a una función no necesita pasar el numero de filas, sólo el de columnas.

La forma en que te mueves dentro del arreglo se llama aritmética de puntero.

Tu ejemplo se puede hacer más interesante si tu función recibiera un puntero a entero y no toda la matriz. Ve eso y sino aquí estamos para ayudarte.

Bueno para que no me puntúes negativo aquí esta el código, basado en lo que hiciste.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3. void apuntarre(int *arre);
  4.  
  5. void main() {
  6.     int arre[3][3];
  7.  
  8.     apuntarre((int*) arre);
  9.  
  10.     for (int x = 0; x < 3; x++) {
  11.         for (int y = 0; y < 3; y++) {
  12.             printf("%d", arre[x][y]);
  13.  
  14.         }
  15.         printf("\n");
  16.     }
  17.  
  18.     getch();
  19. }//fin del main
  20.  
  21. void apuntarre(int *arre) {
  22.     int *ptr, a = 0;
  23.  
  24.     ptr = arre;
  25.  
  26.     for (int x = 0; x < 9; x++) {
  27.  
  28.         ptr[x] = a;
  29.         a++;
  30.  
  31.     }
  32. }
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%

Etiquetas: apuntadores, arreglos, funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:15.