Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: virtualelhacker en 10 Septiembre 2015, 04:57 am



Título: Limpiar columna en matriz de dos dimensiones
Publicado por: virtualelhacker en 10 Septiembre 2015, 04:57 am
Hola,
tengo esta espina hace más de medio año, ojalá me puedan ayudar a comprender el tema.
No comprendo como es que funciona la siguiente linea:

Código:
(*p)[i] = 0;

comprendida en el siguiente código:

Código:
int mat[num_filas][num_columnas], (*p)[num_columnas], i; 
for(p = &mat[0]; p < &mat[num_filas]; p++)
(*p)[i] = 0;

Según mi libro, este for limpia la columna i de la matriz. Entiendo que p es un puntero a un array de enteros de tamaño num_columnas. Entiendo que en el for le asigna la primera fila de la matriz al puntero, comprueba que sea menor o igual a la ultima fila, y aumenta p de fila en fila. Y entiendo que en
Código:
(*p)[i] = 0;
la i es la columna a rellenar con 0, pero lo que me confunde es el uso del valor al que apunta p, es decir (*p) con un subíndice. Además en mi libro dice que los paréntesis de (*p) son necesarios ya que sino el compilador interpretaría *(p), lo cual sí que tiene sentido para mi.


Título: Re: Limpiar columna en matriz de dos dimensiones
Publicado por: someRandomCode en 10 Septiembre 2015, 05:04 am
Como tenes definido p?
p parece ser un int**, de modo tal que p toma la direccion de la variable que apunta al primer elemento del array, *p apuntaria al array mismo, y *p
  • es int


Título: Re: Limpiar columna en matriz de dos dimensiones
Publicado por: virtualelhacker en 10 Septiembre 2015, 05:39 am
Osea p tiene almacenada la dirección de un array, el valor al que apunta esa dirección, es a su vez una dirección, la dirección del primer elemento de la fila actual. En
Código:
(*p)[i]
(*p) toma esa dirección y le suma i x el tamaño de cada elemento, en este caso ints. Entendí bien?