How does it work and how can a bidimensional
fix be made from a double pointer in C
?
int **a;
How does it work and how can a bidimensional
fix be made from a double pointer in C
?
int **a;
I can show you an example that may help you:
/*
Crea una matriz dinámica , la rellena de ceros y 1 en su diagonal.
Matriz identidad .- Pascual Martínez Cruz
Modifiqué este código porque estaba incompleto y con cosas innecesarias. -Zeugirdor
Entre esas cosas, tenía los bucles incompletos y faltaba código necesario para
que mostrara la matriz identidad de n filas por n columnas. Además, lo "adapté"
a Windows, ya que tenía partes del código muy cortas pero de linux.
El código tal cual estaba está en esta página, por ahora, online:
http://m68455pagpersonal.galeon.com/pdoblec.html
*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int * asignar_matriz(int x); // asigna la memoria de la matriz
void diagonal_matriz(int **array,int x); // rellena de 1s la diagonal
void imprimir_matriz(int **array,int x); // imprime la matriz
void main(void){
int n; // dimensión de la matriz
int i,j; // contadores
int **matriz=NULL; // puntero doble para la matriz dinámica
system("cls");
printf("Introduce el tamanyo de la matriz:\n");
scanf("%d",&n);
matriz=asignar_matriz(n);
diagonal_matriz(&*matriz,n); // paso de la matriz a funciones
imprimir_matriz(&*matriz,n); // paso de la matriz a funciones
printf("\n\n");
system("pause");
}
// asigna la memoria de la matriz
int * asignar_matriz(int x){
int i,j;
int **array;
array=(int **)calloc(x,sizeof(int *)); // se reserva memoria para la matriz de x filas que contiene direcciones de memoria a las segundas dimensiones.
for (i=0;i<x;i++){
array[i]=(int *)calloc(x,sizeof(int *)); // se reserva memoria para las segundas dimensiones , x columnas
}
// en memoria ya tenemos reservado espacio para una matriz de x por x --> array[x][x]
return &*array; // retorno de un puntero doble
}
// rellena de 1s la diagonal y de 0 lo demas
void diagonal_matriz(int **array,int x){
int i,j;
for (i=0;i<x;i++){
for (j=0;j<x;j++){
if (i==j){
array[i][j]=1;
}
else{
array[i][j]=0; // esto no lo tenía el código original.
}
}
}
}
// imprime la matriz
void imprimir_matriz(int **array,int x){
int i,j;
printf("\nIMPRIMIENDO MATRIZ\n");
printf("\n==================\n");
// manejo del puntero doble recibido como si fuese una matriz
for (i=0;i<x;i++){
printf("\n");
for (j=0;j<x;j++){
printf("%d ",array[i][j]);
}
}
}