polska Posted June 29, 2012 at 01:20 AM Report #466323 Posted June 29, 2012 at 01:20 AM Boas pessoal, eu estou a tentar fazer uma função que receba duas matrizes como parametros.. Mas não sei como o fazer, eu tentei char *matriz1, char *matriz2 e tentei com 2 * também mas não funcionou, também se depois na hora de chamar a função estou a enviar corretamente ass matrizes, alguem me pode ajudar? Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
KTachyon Posted June 29, 2012 at 02:05 AM Report #466327 Posted June 29, 2012 at 02:05 AM Podes utilizar: void func(char matriz1[], char matriz2[]) ou void func(char *matriz1, char *matriz2) são ambos válidos. Mas é possível que queiras enviar também o tamanho dos arrays para a função. “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
pmg Posted June 29, 2012 at 08:29 AM Report #466334 Posted June 29, 2012 at 08:29 AM Supondo que, por matriz, entendes um array cujos elementos sao arrays (char matriz[100][100]) tens basicamente 2 maneiras: 1) Fixas a dimensão "mais interna" int fx(char (*m1)[100], char (*m2)[100]) { m1[2][43] = m2[3][42]; return 0; } int main(void) { char matrizum[100][100]; char matrizdois[200][100]; fx(matrizum, matrizdois); return 0; } 2) Convertes (virtualmente) o array de arrays num array simples e passas o tamanho da dimensão mais interna int fx(int innersize, char *m1, char *m2) { m1[2*innersize + 43] = m2[3*innersize + 42]; return 0; } int main(void) { char matrizum[100][100]; char matrizdois[200][100]; fx(100, matrizum[0], matrizdois[0]); return 0; } Com um compilador de C99, podes usar o método 1) com um valor da dimensão "mais interna" variável /* C99 */ int fx(int innersize, char (*m1)[innersize], char (*m2)[innersize]) { m1[2][43] = m2[3][42]; return 0; } int main(void) { char matrizum[100][100]; char matrizdois[200][100]; fx(100, matrizum, matrizdois); return 0; } 1 Report What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
polska Posted June 29, 2012 at 01:02 PM Author Report #466423 Posted June 29, 2012 at 01:02 PM Podes utilizar: void func(char matriz1[], char matriz2[]) ou void func(char *matriz1, char *matriz2) são ambos válidos. Mas é possível que queiras enviar também o tamanho dos arrays para a função. Da-me erro ao passar ao chamar a função, como devo chama-la? eu tentei: func( forma_original[11][11] ); Supondo que, por matriz, entendes um array cujos elementos sao arrays (char matriz[100][100]) tens basicamente 2 maneiras: 1) Fixas a dimensão "mais interna" int fx(char (*m1)[100], char (*m2)[100]) { m1[2][43] = m2[3][42]; return 0; } int main(void) { char matrizum[100][100]; char matrizdois[200][100]; fx(matrizum, matrizdois); return 0; } 2) Convertes (virtualmente) o array de arrays num array simples e passas o tamanho da dimensão mais interna int fx(int innersize, char *m1, char *m2) { m1[2*innersize + 43] = m2[3*innersize + 42]; return 0; } int main(void) { char matrizum[100][100]; char matrizdois[200][100]; fx(100, matrizum[0], matrizdois[0]); return 0; } Com um compilador de C99, podes usar o método 1) com um valor da dimensão "mais interna" variável /* C99 */ int fx(int innersize, char (*m1)[innersize], char (*m2)[innersize]) { m1[2][43] = m2[3][42]; return 0; } int main(void) { char matrizum[100][100]; char matrizdois[200][100]; fx(100, matrizum, matrizdois); return 0; } Só funcionou a primeira maneira, a segunda dava erro de incompatibilidade ao chamar a função, e o terceiro dizia na função, "a parameter is not allowed" , isto referente ao [innersize] .. Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
pmg Posted June 29, 2012 at 01:39 PM Report #466427 Posted June 29, 2012 at 01:39 PM Só funcionou a primeira maneira, a segunda dava erro de incompatibilidade ao chamar a função, e o terceiro dizia na função, "a parameter is not allowed" , isto referente ao [innersize] .. 1) ok 2) qual erro? Qual é a mensagem concreta? incompatibilidade entre o quê e o quê? Quais são as definições que estás a usar (as da função; as dos parametros; a da chamada; tudo)? 3) aparentemente o teu compilador não reconhece a linguagem C como definida em 1999; está configurado para a linguagem de 1989. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now