<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
<font face="Courier New">Hola a todos, tengo una duda muy grande, espero me puedan ayudar.</font><div><font face="Courier New"><br></font></div><div><font face="Courier New" size="2">Suponiendo que tenemos la siguiente </font><font face="Courier New">declaración</font><font face="Courier New" size="2">:</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">int A[4][4];<br></font></div><div><font face="Courier New">int *B[4];</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">Luego reservamos memoria para el array de punteros B con la función malloc().</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">for(short x=0; x<4; x++)</font></div><div><font face="Courier New">   B[t]=(int *)malloc(4 * sizeof(int));<br></font></div><div><br></div><div><font face="Courier New">Desde aquí tengo entendido que para pasar un puntero al array bidimencional como argumento a una función, así:</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">pares(A);</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">el parámetro especificado debe ser </font><font face="Courier New" size="2">A[][4], quedando el prototipo de la </font><font face="Courier New">función</font><font face="Courier New" size="2"> como:</font></div><div><span style="font-family: 'Courier New'; font-size: 10pt; "><br></span></div><div><span style="font-family: 'Courier New'; font-size: 10pt; ">void pares( int A[][4]);</span></div><div><span style="font-family: 'Courier New'; font-size: 10pt; "><br></span></div><div><font face="Courier New" size="2">La constante 4 se especifica debido a que el compilador necesita saber cuanto espacio de memoria está reservado por cada fila y </font><font face="Courier New">así</font><font face="Courier New" size="2"> saber donde empieza la siguiente fila.</font></div><div><span style="font-family: 'Courier New'; font-size: 10pt; "><br></span></div><div><font face="Courier New">Pero para pasar un puntero a array de punteros como argumento de una función el prototipo debe ser:</font></div><div><br></div><div><span style="font-family: 'Courier New'; ">void pares( int *B[]);</span></div><div><span style="font-family: 'Courier New'; "><br></span></div><div><font face="Courier New">en donde no se especifica el espacio de memoria de cada fila apuntada por cada puntero.</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">Mi pregunta es:</font></div><div><font face="Courier New">Si para acceder a B dentro de la función se puede utilizar indexacion como en cualquier array bidimencional(aunque se que un array bidimencional y un array de punteros no es exactamente lo mismo) (ejem: B[1][0]), ¿Como sabe el compilador donde empieza cada "fila" apuntada por cada array?</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">Ademas tengo otra duda:</font></div><div><font face="Courier New">Como ven aprendo a programar en libros y no tengo quien me guié, me gustaría saber si es necesario saber de es estos temas así en profundidad porque en la universidad en la que estaba no vimos este tema en profundidad, aunque solo alcance a llegar asta segundo semestre. Por supuesto me estoy refiriendo a la carrera de sistemas.</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">Gracias a todos por sus respuestas, y gracias por dejarme ser parte de esto...</font></div>                                           </div></body>
</html>