2. No necesariamente se debe usar puntero a puntero, esto solo es una manera de implementarlo.
3. Con un solo malloc lo puedes hacer porque en C las matrices se representan en memoria por filas de esta manera:
1 2 3
4 5 6
En memoria sería así:
1 2 3 4 5 6
1. En el código puedes ver como se reserva una matriz dinámica sin usar puntero a puntero, como se puede tratar como una fila y bueno cualquier duda avísame se me debieron escapar muchas cosas.
#include <stdio.h>
#include <stdlib.h>
#define FILAS 2
#define COLUMNAS 3
int matriz[FILAS][COLUMNAS] = { {1,2,3}, {4,5,6}};
int * matriz_dinamica;
/*
imprimir tratando la matriz como vector
*/
void imprimir_vector(int vector[]){
register int i;
for(i=0;i<FILAS*COLUMNAS;i++)
}
/*
imprimir tratando la matriz como un puntero
*/
void imprimir_puntero(int * matriz){
register int i;
for(i=0;i<FILAS*COLUMNAS;i++)
}
int main()
{
register int i,j;
imprimir_vector(matriz);
imprimir_puntero(matriz);
int (*ptr_matriz)[COLUMNAS]; // Apuntador a una matriz
matriz_dinamica
= (int*)malloc(sizeof(int)*FILAS
*COLUMNAS
);
ptr_matriz = matriz_dinamica;
ptr_matriz[0][0] = 1;
ptr_matriz[0][1] = 2;
ptr_matriz[0][2] = 3;
ptr_matriz[1][0] = 4;
ptr_matriz[1][1] = 5;
ptr_matriz[1][2] = 6;
for(i=0;i<FILAS;i++){
for(j=0;j<COLUMNAS;j++)
printf("%d ", ptr_matriz
[i
][j
]); }
return 0;
}
NOTA: Para las matrices el compilador debe saber el numero de columnas de la matriz, ya que cuando usas el operador [] se resuelve de la siguiente manera:
matriz[i][j] = matriz + i * COLUMNAS + j