Limpiar columna en matriz de dos dimensiones

Iniciado por virtualelhacker, 10 Septiembre 2015, 04:57 AM

0 Miembros y 1 Visitante están viendo este tema.

virtualelhacker

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:

(*p)[i] = 0;

comprendida en el siguiente 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 (*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.

someRandomCode

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

virtualelhacker

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 (*p)[i]
(*p) toma esa dirección y le suma i x el tamaño de cada elemento, en este caso ints. Entendí bien?