Alocação dinâmica de memória em matrizes em C
Uma matriz de tamanho dinâmico em C é implantada a
partir de vetores contidos em vetores. Exemplificando, uma matriz 2x3 teria em
cada uma das duas linhas, um vetor de 3 posições formando assim três colunas.
Sendo declarada como um ponteiro de ponteiro (por
exemplo, int **matriz), para a sua alocação é necessário a alocação de um
vetor comum e com o auxílio de uma função de repetição, como o for, criar um novo vetor
dentro do primeiro. Como se pode ver no código abaixo:
...
//matriz é
alocada como vetor tendo um tamanho m
matriz = (int*) malloc(m * sizeof(int*));
for(i = 0;i <
m;i++){
/*Nesta etapa
é alocado outro vetor dentro da posição i,fazendo desta maneira n colunas*/
matriz[i] =
(int*) malloc (n*sizeof (int*));
…
- A utilização de um dado dessa matriz seria por matriz[i][j].
- m e n são números inteiros que indicarão – quando multiplicados nesse caso pelo tamanho de um int – quantos bytes serão alocados.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Escrito por iojoaomarcos :v | |
v. 1.2 | |
Programa que cria uma matriz de tamanho dinâmico | |
e exibe seu conteúdo na tela. | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
int main() { | |
int **matriz; /*Matriz que será alocada dinamicamente | |
(declarada como ponteiro de ponteiro)*/ | |
int m, n; //Dimensões da Matriz | |
int i, j; //Contadores | |
printf("Digite as dimensoes da Matriz: "); | |
scanf("%i %i", &m, &n); | |
//Abaixo, a matriz é inicialmente alocada como um vetor | |
matriz = (int*) malloc(m * sizeof(int*)); | |
for(i = 0;i < m;i++){ | |
/*Nesta etapa é alocado outro vetor dentro da posição i, | |
fazendo desta maneira colunas*/ | |
matriz[i] = (int*) malloc (n*sizeof (int*)); | |
for(j=0; j < n; j++){ | |
printf("Digite o elemento da posicao %i x %i: ",i+1,j+1); | |
scanf("%i",&matriz[i][j]); | |
} | |
} | |
//Exibindo na tela... | |
printf("\n\n\nOs numeros digitados foram:\n"); | |
for(i = 0; i < m; i++){ | |
for(j = 0; j < n; j++){ | |
printf("\nO elemento %i x %i e: %i", i+1, j+1, matriz[i][j]); | |
} | |
} | |
free(matriz); //Libera a memoria | |
matriz = NULL; //"Limpa" a memoria | |
return 0; | |
} |
Esse texto foi originalmente requisitado na disciplina Programação de Computadores do meu curso de Eng. de Computação :v
Comentários
Postar um comentário