Ir para conteúdo

POWERED BY:

Arquivado

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

gRoOvE

Passar matriz bidimensional para função

Recommended Posts

Galera estou com dificuldades em passar uma matriz bidimensional para função via ponteiros, estou fazendo assim:

 

valor que irei passar pra função:
char var[4][40];
func(var);

prototipo:
void func(char **var)

O que estou fazendo errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim argumentos? Está se referindo a passagem por valor?

Quero passar a matriz por referência, como faço então?

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
void mat(char a[][2]){
int i,j;
for(i=0;i<3;i++) {
	for(j=0;j<2;j++)
	printf("%c ", a[i][j]);
}
}

int main(void) {
char b[3][2] = { {'k','8'}, {'h','f'}, {'a','b'}};
mat(B);
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isis, desta forma consegui fazer.

Mas fiquei com dúvidas quanto a outra forma, pois queria usar ponteiros no protótipo da função...acho que estou tentando fazer algo impossível "/

A forma que estou fazendo, seria utilizada se eu tivesse declarado um array de ponteiros, assim:

char **teste
E depois alocado dinâmicamente, e depois passar para função, correto?

 

Ai que surgiu a dúvida, um vetor(char v[10]), se eu passar pra uma função apenas o v, estarei passando o endereço do mesmo...pq um array não funciona da mesma forma?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma array não é um ponteiro. O valor de uma array é o endereço de memória do primeiro elemento da array, mas uma array não é um ponteiro. Prova:

 

#include <stdlib.h>
#include <stdlib.h>

int main()
{

	int *ponteiro = malloc(100 * sizeof(int));
	int array[100];


	printf("\n\tTamanho - ponteiro: %d\n\tTamanho - array: %u\n\n", sizeof ponteiro, sizeof array);

	free(ponteiro);
	return 0;
}

Podemos fazer um ponteiro apontar para o primeiro elemento de uma array - ou seja, fazer o ponteiro receber o valor da array - e, assim, acessar todos os seus elementos.

 

Um "argumento" é algo passado para uma função. Um "parâmetro" é algo que a função precisa receber como argumento. O tipo de passagem - "por valor" ou "por referência" - é independente disto.

 

De qualquer forma, em C, quando queremos manipular arrays, precisamos apenas passar o valor da array - novamente, o endereço do primeiro elemento da array. Como receberemos um endereço, na declaração da função podemos incluir um parâmetro de "ponteiro para " [tipo da array].

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.