Autor Tópico: Alocação de matrizes  (Lida 1929 vezes)

Offline zeroday

  • Usuário Ubuntu
  • *
  • Mensagens: 1.083
    • Ver perfil
Alocação de matrizes
« Online: 14 de Setembro de 2010, 10:41 »
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."

Offline RonaldoRG

  • Usuário Ubuntu
  • *
  • Mensagens: 659
    • Ver perfil
    • Twitter: @rafas_andrade
Re: Alocação de matrizes
« Resposta #1 Online: 14 de Setembro de 2010, 19:28 »
Criar uma matriz 10 x 5:
Código: [Selecionar]
...
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

Offline zeroday

  • Usuário Ubuntu
  • *
  • Mensagens: 1.083
    • Ver perfil
Re: Alocação de matrizes
« Resposta #2 Online: 14 de Setembro de 2010, 19:32 »
Vlw ronaldo deu para entender direitim ;D.
"Lutar sempre , vencer na medida do possível , desistir jamais."