gRoOvE 0 Denunciar post Postado Outubro 28, 2010 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
guidjos 65 Denunciar post Postado Outubro 28, 2010 1. É impossível passar matrizes como argumentos em C. 2. "var" não é um ponteiro. Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Outubro 28, 2010 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
_Isis_ 202 Denunciar post Postado Outubro 28, 2010 #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
gRoOvE 0 Denunciar post Postado Outubro 28, 2010 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 **testeE 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
guidjos 65 Denunciar post Postado Outubro 29, 2010 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