Ir ao conteúdo

Passando Matriz[][] para funcão


amzero

Posts recomendados

Postado

Olá galera,

em uma função, digamos funcao_1, instanciei a matriz chamada de Vetor:

funcao_1(){

Estrutura ** Vetor;
Vetor = new Estrutura*[N_Trecho];

for(int i = 1; i < N_Trecho; i++){
Vetor[i] = new Estrutura[medida];
}
}

Queria saber como passo esse Vetor para uma outra funcao, digamos funcao_2.

Seria algo do tipo funcao_2(Estrutura Vetor[N_Trecho])?

Porém quando faço deste jeito não consigo utilizar a estrutura interna de modo que,

Vetor[1][2].nome não funciona.

Agradeço desde já.

Abraço.

Postado

voce quer passar um array bidimensional para uma função certo?

se for voce pode fazer algo como

FunçãoRecebe(Tipo ab[][tamanho])

o valor tem que ser especificado na declaração da função,porém voce pode ter um objeto conhecido pelo compilador em escopo global(ou nao)que voce pode atribuir o tamanho do array a ele e deixa a função um pouco mais genérica

Postado

A rigor, Vetor não seria uma matriz e sim um ponteiro para ponteiro, uma variável que como tal armazena um valor. Este serviria para controlar a matriz, que estaria em outro lugar da memória do programa F5Rua4D.gif.

Então, para controlar a matriz de dentro de outra função você poderia passar o ponteiro para ponteiro como neste código:


void Funcao(int **Ponteiro)
{
printf("%d\n", Ponteiro);
}



int main(void)
{
int **Ponteiro = (int **) 150;
Funcao(Ponteiro);
getchar();
return 0;
}

E depois, na nova função, manipular o parâmetro como se fosse o ponteiro para ponteiro que forneceu valor a ele.

Espero ter ajudado GbhmuXl.gif.

Postado

Só um acréscimo ao que o @rjjj postou:

Não utilize ponteiros sem inicializá-los, isto é, explicitamente dizer para onde eles apontam.

int ** Ponteiro = (int **) 150;

Desta forma, você estará armazenando o valor 150 em algum lugar da memória, apontado pelo endereço armazenado no endereço para onde Ponteiro aponta (confuso, né?). Agora, para onde se está apontando? Não se sabe! E aí mora o perigo.

O correto a fazer é, antes de tudo, reservar um espaço na memória exclusivo para este ponteiro. Isso pode ser feito com a função malloc ou alguma outra do gênero, como calloc.

Assumindo que queremos uma matriz MxN:

int ** Ponteiro = malloc( M * sizeof *int ), k;
for( k = 0; k < M; ++k )
*(Ponteiro+k) = malloc( N * sizeof int );

A função malloc recebe como argumento a quantidade de bytes que você deseja reservar para o ponteiro e retorna o endereço de memória do início do bloco de memória reservado para aquele ponteiro.

Ao final do programa, ou quando não precisar mais do ponteiro, você deve liberar a memória reservada a ele, com a função free.

for( k = 0; k < M; ++k )
free( *( Ponteiro + k ) );

free( Ponteiro );

Tenha o cuidado de liberar memória apenas uma vez para cada reserva de memória feita. A tentativa de liberar memória duas vezes para o mesmo ponteiro resulta num comportamento inesperado.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!