MiaU Postado Setembro 24, 2009 Denunciar Share Postado Setembro 24, 2009 (editado) Olá, estou com um problema aqui...Não estou conseguindo passar uma matriz por ponteiro para uma função especifica, alguém poderia me ajudar e explicar como faço isso??Agradeço desde já!PS: O Objetivo é sortear numeros de 1-60 e colocar na matriz.Segue abaixo o codigo:#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> #define COL 10 #define LIN 6 void gerar_bolao(int **a, int tamx, int tamy) { int i, j; srand(time(NULL)); for (i = 0; i < tamx; i++) for (j = 0; j < tamy; j++) a[i][j] = rand() % 60 + 1; } main() { int b[COL][LIN]; gerar_bolao(b,COL,LIN); //Aqui esta dando erro } } Editado Setembro 24, 2009 por Jonathan Queiroz Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mnemonic Postado Setembro 24, 2009 Denunciar Share Postado Setembro 24, 2009 (editado) Eu sempre tive esse problema também. Existem algumas soluções usando cast, ou declarando a matriz como um array de ponteiros. Aqui eu contornei o problema usando uma struct:#include <stdio.h> #include <stdlib.h> #include <time.h> #define COL 10 #define LIN 6 typedef struct sMatriz { int m[COL][LIN]; } Matriz; void gerar_bolao(Matriz *a, int tamx, int tamy) { int i, j; srand(time(NULL)); for (i = 0; i < tamx; i++) for (j = 0; j < tamy; j++) a->m[i][j] = rand() % 60 + 1; //pra acessar os elementos do ponteiro, usa-se o "->" } int main() { int i, j; Matriz b; gerar_bolao(&b, COL, LIN); //como a função recebe um pointer, //precisa passar o endereço de b (&) for (i = 0; i < COL; i++) for (j = 0; j < LIN; j++) printf("%d ",b.m[i][j]); return 0; } Editado Setembro 24, 2009 por Mnemonic Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Alisson Coelho Postado Setembro 24, 2009 Denunciar Share Postado Setembro 24, 2009 Olá Miau e Mnemonic,Quando trabalhamos com arrays multidimensionais e precisamos acessar conteúdos passados por referência à alguma função, temos que utilizar aritmética de ponteiros, ao invés de acessarmos da forma indexada os componentes da matrizFaça assim:void gerar_bolao(int *a, int tamx, int tamy) { int i, j; srand(time(NULL)); for (i = 0; i < tamx; i++) for (j = 0; j < tamy; j++) *(a + i*tamy +j) = rand() % 60 + 1; //acessando o componente do Array utilizando aritmética de ponteiros } main() { int b[COL][LIN]; gerar_bolao(&b[0][0],COL,LIN); //Passando o array por referencia, atraves do endereço do primeiro elemento do mesmo } }A Aritmetica de ponteiros pode ser utilizada em razão de cada componente do array estático estar posicionado na memória de maneira contígua (um elemento "ao lado" do outro), então apartir do primeiro elemento do array, podemos acessar qualquer outro, desde que se conheça a dimensão do arrayEspero que tenha ajudado,Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 MiaU Postado Setembro 24, 2009 Autor Denunciar Share Postado Setembro 24, 2009 Queria agradecer ao Alisson Coelho e Mnemonic pela a grande ajuda...Resolvi meu problema!!Obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
MiaU
Olá, estou com um problema aqui...
Não estou conseguindo passar uma matriz por ponteiro para uma função especifica, alguém poderia me ajudar e explicar como faço isso??
Agradeço desde já!
PS: O Objetivo é sortear numeros de 1-60 e colocar na matriz.
Segue abaixo o codigo:
Editado por Jonathan QueirozLink para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.