Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Funções + Matrizes + Ponteiros


MiaU

Pergunta

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 por Jonathan Queiroz
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

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 por Mnemonic
Link para o comentário
Compartilhar em outros sites

  • 0

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 matriz

Faç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 array

Espero que tenha ajudado,

Abraço

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...