Alocação de matrizes

Iniciado por zeroday, 14 de Setembro de 2010, 10:41

tópico anterior - próximo tópico

zeroday

Olá a todos,

Há muito procuro a documentação  de como alocar dinamicamente matrizes em C.

Já achei na internet pessoas me dizendo como fazer , porem nenhuma delas me explicava o pq  de ser daquela maneira , e era isto que eu queria saber ,

Se alguem poder me explicar detalhadamente agradeceria.

Abraço.
"Lutar sempre , vencer na medida do possível , desistir jamais."

RonaldoRG

Criar uma matriz 10 x 5:

...
int **matriz;
matriz = (int**)malloc(10*sizeof(int*));
for(int i=0; i<10; i++) matriz[i] = (int*)malloc(5*sizeof(int));

m[3][4] = 7;
...

Pra entender você tem que estudar ponteiros para ponteiros.
Um ponteiro (*p) guarda um endereço de um bloco de memória. Um ponteiro de ponteiro(**p) guarda o endereço de memória de outro ponteiro, ou seja, aponta para outro ponteiro.
Então int **matriz, declara um ponteiro de ponteiro do tipo inteiro.
A linha "matriz = (int**)malloc(10*sizeof(int*));" cria um bloco de 10 ponteiros e retorna o endereço do primeiro para matriz.
A linha "for(int i=0; i<10; i++) matriz = (int*)malloc(5*sizeof(int));" aloca 5 blocos de memória para cada um dos 10 ponteiros.
Depois é só usar como uma matriz normal.
É mais ou menos assim. Qualquer coisa posta ai.
Ubuntu 12.04

zeroday

Vlw ronaldo deu para entender direitim ;D.
"Lutar sempre , vencer na medida do possível , desistir jamais."