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

Procesar columnas de un array multidimensional

Estas en el tema de Procesar columnas de un array multidimensional en el foro de C/C++ en Foros del Web. Tengo una pequeña duda en cuanto a si mi libro tiene un error, o yo estoy comprendiendo mal. La primera parte del for "p=&a[0]" asigna ...
  #1 (permalink)  
Antiguo 17/12/2014, 22:52
 
Fecha de Ingreso: octubre-2008
Mensajes: 66
Antigüedad: 16 años, 1 mes
Puntos: 1
Procesar columnas de un array multidimensional

Tengo una pequeña duda en cuanto a si mi libro tiene un error, o yo estoy comprendiendo mal. La primera parte del for "p=&a[0]" asigna la dirección de la dirección del primer array dentro de "a". A mi me parece que debería ser solo "p=a[0]" sin el &, ¿o me equivoco?:
Ciclo que pone en 0 la columna i del array a:
Código C:
Ver original
  1. int a[NUM_FIL][NUM_COL], (*p)[NUM_COL], i;
  2. for(p=&a[0]; p<&a[NUM_FIL]; p++)
  3.     (*p)[i]=0;

Última edición por Virtualforos; 17/12/2014 a las 23:02
  #2 (permalink)  
Antiguo 18/12/2014, 00:27
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Procesar columnas de un array multidimensional

Debido a la siguiente definición:

Código C:
Ver original
  1. int a[NUM_FIL][NUM_COL]

Entonces, queda claro que a es un puntero doble "int **a". Además, también tenemos que según la definición de "p":

Código C:
Ver original
  1. int (*p)[NUM_COL]

"p" es también un puntero doble.

Entonces:

* a[0] obtiene la posición de memoria donde empieza la primera fila
* &a[0] obtiene un puntero doble
* p = &a[0] asignas un puntero doble a otro puntero doble.

La asignación, como puedes ver, es correcta.

Un saludo.
  #3 (permalink)  
Antiguo 18/12/2014, 18:12
 
Fecha de Ingreso: octubre-2008
Mensajes: 66
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Procesar columnas de un array multidimensional

Cita:
Iniciado por eferion Ver Mensaje
Debido a la siguiente definición:

Código C:
Ver original
  1. int a[NUM_FIL][NUM_COL]

Entonces, queda claro que a es un puntero doble "int **a". Además, también tenemos que según la definición de "p":

Código C:
Ver original
  1. int (*p)[NUM_COL]

"p" es también un puntero doble.

Entonces:

* a[0] obtiene la posición de memoria donde empieza la primera fila
* &a[0] obtiene un puntero doble
* p = &a[0] asignas un puntero doble a otro puntero doble.

La asignación, como puedes ver, es correcta.

Un saludo.
Suponiendo que NUM_FIL es 5 y NUM_COL es 3.
Código C:
Ver original
  1. int a[5][3], (*p)[3], i;
  2. for(p=&a[0]; p<&a[5]; p++)
  3.     (*p)[i]=0;
Entonces p = &a[0] asigna a "p" la dirección del puntero que apunta a a[0][0].
Luego el ciclo termina cuando "p" apunta a la dirección del puntero que apunta a a[5][0].
Ahora, si "p" es un apuntador a un array de 3 elementos enteros, ¿Cómo puede almacenar una dirección de un puntero?
  #4 (permalink)  
Antiguo 18/12/2014, 19:59
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Procesar columnas de un array multidimensional

Código:
int a[NUM_FIL][NUM_COL], (*p)[NUM_COL], i;
for(p=&a[0]; p<&a[NUM_FIL]; p++)
        (*p)[i]=0;
int a[NUM_FIL][NUM_COL]; es un array bidimensional que puede interpretarse como de NUM_FIL filas de NUM_COL columnas cada una, aunque sólo como una analogía; en memoria se va a tener una sucesión densa de NUM_FIL arrays de NUM_COL elementos cada uno.

(*p)[NUM_COL]; es un puntero a un array de NUM_COL elementos.

Entonces, p puede apuntar en forma segura a cada uno de los NUM_FIL arrays de a, pero no más. En el ejemplo:

p = &a[0] asigna a p la dirección de memoria del primer array de NUM_COL en a.

A la pregunta de si es correcta la asignación p = &a[0], mi respuesta es sí, es correcta, porque se está asignando la dirección del primer array de NUM_COL elementos de a al puntero a array de NUM_COL elementos p.

Y es incorrecta la asignación p = a[0], porque p y a[0] son de tipos diferentes:
p es un puntero a un array de NUM_COL elementos, mientras que a[0] es un un array de NUM_COL elementos.

Última edición por lareto; 18/12/2014 a las 20:05

Etiquetas: columnas, int, multidimensional, procesar
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 03:56.