<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span style="FONT-FAMILY: Arial">Buenas a todos,</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span style="FONT-FAMILY: Arial">antes de nada os comento que yo programaba en Fortran y me decidí a pasar a C porque me dijeron que era mejor y a mi me interesa ya que trabajo haciendo simulaciones numéricas. Lo que más me interesa ahora es el ahorro de memoria cuando trabajo con matrices muy grandes. Mirando el manual de C con clase he visto como definir un puntero (ej: **A) que me permite crear una matriz a mitad de programa con la dimensión que corresponda (y así no tener que hacer dos programas, uno para calcular la dimensión y otro para trabajar con las matrices), sin embargo resulta que los punteros ocupan memoria (N*M espacios de memoria adicionales para los punteros) que no es necesaria definiendo la matriz al inicio del programa (ej: A[N][M]) como un array de dos dimensiones. Así que mi pregunta es si un programa sencillo como
</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"><span style="FONT-FAMILY: Arial"> </span></p><span style="FONT-FAMILY: Arial">
<p>#include <iostream><br>void funcion(int B[1][2]); </p>
<p>int main() { <br> int A[1][2]; </p>
<p> A[0][0]=1; A[0][1]=2; A[0][2]=3;<br> A[1][0]=4; A[1][1]=5; A[1][2]=6;<br> <br> funcion(A); <br> printf("A = %i %i %i \n",A[0][0], A[0][1], A[0][2]);<br> printf(" %i %i %i \n",A[1][0], A[1][1], A[1][2]);
<br> <br> getchar();<br>}<br> <br>void funcion(int B[1][2]){<br> B[0][0]=9; B[0][1]=9; B[0][2]=9;<br> B[1][0]=9; B[1][1]=9; B[1][2]=9; <br>}</p></span>
<p class="MsoNormal" style="MARGIN: 5pt 0cm; mso-layout-grid-align: none"><span style="FONT-FAMILY: Arial">es más económico que</span></p>
<p class="MsoNormal" style="MARGIN: 5pt 0cm; mso-layout-grid-align: none"><span style="FONT-FAMILY: Arial">#include <iostream></span></p>
<p class="MsoNormal" style="MARGIN: 5pt 0cm; mso-layout-grid-align: none"><span lang="EN-GB" style="FONT-FAMILY: Arial; mso-ansi-language: EN-GB">void funcion(int **B); <br>int main() { <br> int i,n,m,**A;<br> <br>
n=2; m=3;<br> A=new int *[n];<br> for (i=0;i<n;i++){A[i]=new int [m];}</span></p>
<p class="MsoNormal" style="MARGIN: 5pt 0cm; mso-layout-grid-align: none"><span lang="EN-GB" style="FONT-FAMILY: Arial; mso-ansi-language: EN-GB"> A[0][0]=1; A[0][1]=2; A[0][2]=3;<br> A[1][0]=4; A[1][1]=5; A[1][2]=6;
<br> funcion(A); <br> <br> printf("A = %i %i %i \n",A[0][0], A[0][1], A[0][2]);<br> printf(" %i %i %i \n",A[1][0], A[1][1], A[1][2]);</span></p>
<p class="MsoNormal" style="MARGIN: 5pt 0cm; mso-layout-grid-align: none"><span lang="EN-GB" style="FONT-FAMILY: Arial; mso-ansi-language: EN-GB"> for (i=0;i<n;i++){delete[] A[i];}<br> delete[] A;</span></p>
<div class="MsoNormal" style="MARGIN: 5pt 0cm; mso-layout-grid-align: none"><span lang="EN-GB" style="FONT-FAMILY: Arial; mso-ansi-language: EN-GB"> getchar();<br>}<br> <br>void funcion(int **B){<br> B[0][0]=9; B[0][1]=9; B[0][2]=9;
<br> B[1][0]=9; B[1][1]=9; B[1][2]=9; <br>}</span></div>
<div class="MsoNormal" style="MARGIN: 5pt 0cm; mso-layout-grid-align: none"><span lang="EN-GB" style="FONT-FAMILY: Arial; mso-ansi-language: EN-GB"></span> </div>
<p class="MsoNormal" style="MARGIN: 5pt 0cm; mso-layout-grid-align: none"><span style="FONT-FAMILY: Arial">Si ahora tengo una matriz simétrica (A[i][j]=A[j][i]) y quiero ahorrar la memoria repetida lo que tendré es una "matriz triangular". Mi pregunta es si me creo una estructura para almacenar esto la estructura también almacena punteros o no, ahorro memoria con la estructura o es la misma que creando un puntero con la forma de la estructura.
</span></p>
<div class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: Arial"></span> </div>
<div class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Arial">Una ultima preguntita más. Como puedo medir el tamaño de una estructura y sus punter para ver si me paso de la memoria RAM de mi ordenador.
</span></span></div>
<div class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: Arial"><span style="FONT-FAMILY: Arial"></span></span> </div>
<div class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: Arial">Al que me conteste estas preguntas ya de antemano le doy un millón de gracias (10e6*gracias).</span></div>