Como passar matriz dinâmica por parâmetro em C?

1. Como passar matriz dinâmica por parâmetro em C?

Augusto Cadini
tuto

(usa Fedora)

Enviado em 03/02/2013 - 13:13h

Galera, é o seguinte.
Tenho um trabalho de algoritmos que to fazendo, que pode ser conferido no link -> http://www.pb.utfpr.edu.br/ribas/aed1/2012-2/trabalho1/

To fazendo uma função que deveria receber por parâmetro um endereço de uma matriz, que seria meu "mapa". Mas não to conseguindo fazer isso direito, fiz um trecho com printf só pra testar ve se estou conseguindo fazer essa passagem, mas não ta dando certo.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>



void verificaPosicao(char **mapa,int x, int y,int direcao) //direcao: 1 - norte; 2 - sul; 3 - leste; 4 - oeste;
{
int i, j;

for(i=0;i<=x;i++)
{
for(j=0;j<y;j++)
{
printf("%c",mapa[i][j]);
}
}
}




int main(void)
{
int linhas, colunas;

scanf("%i",&linhas);
scanf("%i",&colunas);

int i, j;


char lixo;
char *mapa[linhas][colunas];
scanf("%c",&lixo);

for(i=0;i<=linhas;i++)
{
for(j=0;j<colunas;j++)
{
scanf("%c",&mapa[i][j]);

}

}

verificaPosicao(&mapa[][],linhas,colunas,1);




printf("\n");
return 0;
}



ali na linha de verificaPosicao é q eu acho que está o problema, mas não to conseguindo resolve.
De entrada o programa recebe um mapa q esta disponivel no link.


  


2. Re: Como passar matriz dinâmica por parâmetro em C?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/02/2013 - 02:12h

Você está usando arrays de tamanho variável (ou VLA, de variable length arrays), recurso que só é suportado do C99 em diante, e não é suportado em C++.

Veja que no C99 você pode passar VLAs para funções de um modo semelhante ao do exemplo abaixo.

void f(int n, int m, int mat[n][m]){
mat[0][0]=n+m;
}

void g(int n, int m){
int matriz[n][m]; // Declara um VLA (n linhas) de VLA (m colunas em cada linha)
f(n, m, matriz); // passa o a matriz (VLA de VLA) e as suas dimensões para a função f()
}


Note que você deve corrigir a declaração de mapa no seu código (se eu entendi bem, você quer uma matriz de caracteres, só que você declarou uma matriz de ponteiros).


3. Re: Como passar matriz dinâmica por parâmetro em C?

Raniere Machado
raniere.ee

(usa Ubuntu)

Enviado em 15/03/2013 - 16:56h

Você está querendo passar o ponteiro para a matriz para a função verificaPosicao. Alterei algumas linhas, veja se é o comportamento que você deseja.


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>



//void verificaPosicao(char **mapa,int x, int y,int direcao) //direcao: 1 - norte; 2 - sul; 3 - leste; 4 - oeste;
void verificaPosicao(char * mapa,int x, int y,int direcao) //direcao: 1 - norte; 2 - sul; 3 - leste; 4 - oeste;
{
int i, j;

for(i=0;i<=x;i++)
{
for(j=0;j<y;j++)
{
printf("%c",mapa[i][j]);
}
}
}



int main(void)
{
int linhas, colunas;

scanf("%i",&linhas);
scanf("%i",&colunas);

int i, j;


char lixo;
// char * mapa[linhas][colunas]; /* Aqui declara uma matriz de ponteiros */


/* Não sei se essa declaração funciona da forma que você espera. o Ideal seria
* alocar dinamicamente, assim:
*
* char * mapa = NULL;
* mapa = malloc((size_t)linhas * colunas)
*
**/

char mapa[linhas][colunas];


scanf("%c",&lixo);

for(i=0;i<=linhas;i++)
{
for(j=0;j<colunas;j++)
{
scanf("%c",&mapa[i][j]);
}

}

//verificaPosicao(&mapa[][],linhas,colunas,1);
verificaPosicao(mapa, linhas,colunas,1); /* O proprio nome eh o endereço da matriz */


printf("\n");

/* Se você alocar dinamicamente, precisa liberar memória

free(mapa);

*/

return 0;
}


Acho que é isso. Testa e posta o resultado.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts