Foros del Web » Programación para mayores de 30 ;) » Programación General »

punteros y arrays en C

Estas en el tema de punteros y arrays en C en el foro de Programación General en Foros del Web. Hola: Me gustaria saber como puedo referenciar un array bidimensional de enteros (llamado m, por ejemplo) utilizando punteros y sin utilizar la variable m. P.ej. ...
  #1 (permalink)  
Antiguo 07/01/2004, 14:10
 
Fecha de Ingreso: febrero-2003
Mensajes: 22
Antigüedad: 21 años, 9 meses
Puntos: 0
Pregunta punteros y arrays en C

Hola:

Me gustaria saber como puedo referenciar un array bidimensional de enteros (llamado m, por ejemplo) utilizando punteros y sin utilizar la variable m.
P.ej. se que puedo hacer:
- Mediante indexacion: m[i][j]
- Mediante aritmetica de punteros: *(*m+i*N+j)

Pero ¿cómo podria trabajar con la matriz con otro puntero por ejemplo p? ¿Cómo lo tendria que declarar?
En teoria deberia ser: int **p=m;
pero utilizo el visual studio C++ 6.0 y me da error al hacer eso.

Querria mostrar la matriz m utilizando un puntero p.
  #2 (permalink)  
Antiguo 07/01/2004, 16:14
Avatar de xavivars  
Fecha de Ingreso: enero-2002
Ubicación: Benissa - la Marina Alta
Mensajes: 212
Antigüedad: 22 años, 10 meses
Puntos: 1
Es posible que la solución sea hacer
Código PHP:
int ** p=&m
aunque no lo puedo probar en estos momentos.

Ya nos contaras
  #3 (permalink)  
Antiguo 07/01/2004, 17:38
 
Fecha de Ingreso: febrero-2003
Mensajes: 22
Antigüedad: 21 años, 9 meses
Puntos: 0
Gracias por la respuesta pero no funciona.

Sigo esperando ayuda.
  #4 (permalink)  
Antiguo 07/01/2004, 18:28
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 7 meses
Puntos: 25
Has intentado simplemente?:
Código:
int m[20][20];
int *p;
p = m; //valor de "p" igual a direccion de "m"
Si mal no recuerdo M es un apuntador y no hay que desreferenciarlo por que los arrays vienen desreferenciados por naturaleza.

Simplemente hago inventos, no lo puedo verificar y hace un rato que no uso C.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche

Última edición por Mithrandir; 07/01/2004 a las 18:30
  #5 (permalink)  
Antiguo 09/01/2004, 05:27
 
Fecha de Ingreso: febrero-2003
Mensajes: 22
Antigüedad: 21 años, 9 meses
Puntos: 0
Gracias Mithrandir pero esa solución tampoco funciona.
En teoria deberia funcionar:
int m[5][5];
int **p;
p=m;
y luego ya trabajar con p igual que con m, pero da error en la ultima linea, en concreto dice:
cannot convert from 'int [5][5]' to 'int ** '

No sé si será por el compilador de C que uso (Visual Studio C++ 6.0) ya que tampoco permite el uso de la sentencia gotoxy que aparece en cualquier manual de C.

Sigo esperando ayuda.
  #6 (permalink)  
Antiguo 10/01/2004, 00:09
 
Fecha de Ingreso: septiembre-2003
Mensajes: 172
Antigüedad: 21 años, 2 meses
Puntos: 0
Hola,
Creo que tienes razon en lo de que es el visual C, en el error que te da te obliga a hacer un casting de m; p= (int **) m; si lo haces asi no da ningun error y funciona, pero yo creo que lo que tu decias es correcto en otro compilador.

Saludos!
__________________
Sr.Propio
  #7 (permalink)  
Antiguo 21/01/2004, 17:59
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 7 meses
Puntos: 25
Tu pregunta me dio curiosidad, especialmente el que nadie supieramos la respuesta a una pregunta que en apariencia suena trivial.

La manera correcta es:
Código:
#include<stdio.h>
#include<conio.h>
void main(){
  int m[10][10];
  int (*p)[10];

  m[4][5] = 123;
  p = &m[0];
  clrscr();
  printf("m[4][5]    --> %i\n", m[4][5]);
  printf("p[4][5]    --> %i\n", p[4][5]);
  printf("(*(p+4))[5]--> %i", (*(p+4))[5]);
  getch();
}
La respuesta la obtuve en:
-Programacion en C. - Bataller/Magdalena. - Ed. Alfaomega - ISBN: 970-15-0665-0 - P.164,165
Cita:
"Hemos de avisar que en la declaracion
int (*P)[10]
Es indispensable especificar la dimension, por que para encontrar la posicion p[4][5] se calcula:
4*10*tamaño de un int
para encontrar la fila, y a esto se le suma
5*tamaño de un int
para encontrar la columna dentro de la fila. Por tanto, para encontrar la fila se necesita conocer su amplitud (cuantas columnas contiene) y eso se dice con la dimension. Esto se debe a la forma en que los arrays se guardan en memoria"....
Espero que aunque fuera de tiempo aún te sirva, o por lo menos resuelva tu duda.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #8 (permalink)  
Antiguo 05/02/2004, 00:03
 
Fecha de Ingreso: febrero-2004
Ubicación: Habana
Mensajes: 6
Antigüedad: 20 años, 9 meses
Puntos: 0
//---------------------------------------------------------------------------
Las matricez se almacenan en memoria de la sgte forma

primerafila, segundafila,...

asi que con un pointer a int podemos desplazarnos por ella.


#include<iostream>
#include<conio.h>

using namespace std;
int main(int argc, char* argv[])
{
int Matrix[2][3]=
{
{1,2,3},
{5,6,7}
};

int *temp;
temp = &(Matrix[0][0]);


for(int i=0;i < 6;++i)
cout<<*(temp++)<<endl;


system("pause");
return 0;
}
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 23:06.