Como passar vetores, ou arrays, e Matrizes (vetores multidimensionais) para funções em C

Agora que você já domina bem o uso das funções e dos vetores em C, vamos unir esses dois conhecimentos e ensinar você como passar vetores (unidimensionais, multidimensionais, matriz), ou arrays, para funções.

Como o curso C Progressivo vai mostrar, para programar em C é bem comum passar vetores, e outras estruturas de dados, para funções.

Como você viu nos exemplos passados de nossa apostila de C, dá um certo trabalhinho lidar com vetores.
E para o código não ficar confuso e grande na main(), costumamos colocar os códigos que operam vetores em funções.

Como se tornar um programador C e ter certificado

Como passar um vetor parar uma função em C

Embora tenhamos batido na tecla sobre o fato de vetores serem um conjunto de variáveis, como outras quaisquer, existem alguns detalhes que precisamos saber na hora de passar os vetores para as funções, principalmente no cabeçalho de declaração da função.
Mas não precisa entrar em desespero, pois os detalhes são para facilitar nossa vida.

No caso de um vetor unidimensional (vetor comum, de uma dimensão), precisamos colocar apenas o par de colchetes – [ ] -após o nome da variável, e vazio.
Isso mesmo, vazio. Não importa se seu vetor tem 1, 10 ou 1 milhão de elementos.
As funções em C apenas precisam saber qual o tipo da variável  e se é um vetor.

Então, a sintaxe de uma função que recebe um vetor é:
retorno nomeDaFuncao( tipo vetor[] , ...)

Por exemplo, uma função que recebe um vetor de inteiros e retorna um inteiro:
int funcao( int numeros[] )

Uma função sem retorno que recebe um vetor/array de floats:
void funcao2( float decimais[] )

O outro detalhe vem na hora de invocar a função e passar o vetor como argumento.
Para fazer isso basta colocar o nome do vetor, não precisa dos pares de colchetes [] nem da dimensão do vetor.

Por exemplo, para passar vetores as funções que demos como exemplo:
funcao(numeros);
funcao2(numeros):

Exemplo: Programa que calcula média aritmética, com vetor e função
Crie um programa em C que peça 5 números ao usuário, armazene esses dados em um vetor, passe esse vetor para uma função que retorna o valor da média dos números desse vetor.

#include <stdio.h>
// Curso C Progressivo: www.cprogessivo.net
// O melhor curso de C! Online e gratuito !
// Artigos, apostilas, tutoriais e vídeo-aulas sobre
// a linguagem de programação C !
 
float media(float numeros[], int n)
{
    int count;
    float media=0.0;
 
    for(count=0 ; count<n ; count++)
        media += numeros[count];
 
    return (media/n);
}
 
int main(void)
{ float numeros[5]; int count; for(count=0 ; count < 5 ; count++) { printf("Entre com o numero %d: ", count+1); scanf("%f", &numeros[count]); } printf("A media desses numeros e: %.2f\n", media(numeros, 5));
    return 0;
}


Como passar matrizes (vetores multidimensionais) para funções

Este tópico está separado do anterior, pois aqui temos mais um detalhe que precisamos aprender sobre a passagem de matrizes para funções.

Sabemos que matrizes multidimensionais são aqueles que possuem duas ou mais dimensões.
Vimos também em nosso tutorial sobre matrizes (ou vetoresmultidimensionais) em C, que cada dimensão da matriz exige um paz de colchetes [ ].

Pois bem, o detalhe para passar matriz para as funções é que o primeiro par de colchetes pode sempre ir vazio, e os demais preenchidos.

Por exemplo, vamos supor que você criou um jogo da velha, que é uma matriz 3x3, e uma função que checa se algum jogador ganhou o jogo completando alguma linha.

Essa função teria o seguinte cabeçalho:
int checaLinha( int matriz[][3] )

Ou seja, não precisamos especificar o número de linhas que a matriz tem, mas somente o número de colunas.


Exemplo de código: Como preencher, exibir uma matriz e seu traço, passando a matriz para uma função em C

Crie um programa em C que peça para o usuário preencher uma matriz 3x3, que exiba ela e o valor de seu traço em seguida. Use funções para preencher a matriz, exibir e calcular o traço.

Esse aplicativo em C já foi totalmente resolvido como exemplos, no artigo passado de nossa apostila de C.

O que vamos fazer aqui é criar três funções: uma para preencher a matriz, outra pra exibir e uma que calcula o traço.

Note como a nossa função main() ficou bem limpa.
Esse é o ideal, é padrão C Progressivo!

include <stdio.h>
#define DIM 3
// Curso C Progressivo: www.cprogessivo.net
// O melhor curso de C, Online e gratuito !
// Artigos, apostilas, tutoriais e vídeo-aulas sobre
// a linguagem de programação C !

void preencher(int matriz[][DIM])
{
    int linha,
        coluna;

    for(linha=0 ; linha < DIM ; linha++)
        for(coluna=0 ; coluna < DIM ; coluna++)
        {
            printf("Entre com o elemento matriz[%d][%d]: ", linha+1, coluna+1);
            scanf("%d", &matriz[linha][coluna]);
        }
}

void exibir(int matriz[][DIM])
{
    int linha,
        coluna;

    for(linha=0 ; linha < DIM ; linha++)
    {
        for(coluna=0 ; coluna < DIM ; coluna++)
            printf("%3d ", matriz[linha][coluna]);

        printf("\n");
    }

}

int traco(int matriz[][DIM])
{
    int count,
        traco=0;

    for(count=0 ; count < DIM ; count++)
        traco += matriz[count][count];

    return traco;
}

int main(void)
{ int matriz[DIM][DIM]; preencher(matriz); exibir(matriz); printf("\nTraco da matriz: %d\n", traco(matriz));

    return 0;
}

7 comentários:

Anônimo disse...

Legal, foi muito útil. Ótimo site, sempre uso para consultas.

Anônimo disse...

Legal o blog, estou aprendendo muito.
Tem algum jeito de eu passar uma matriz para uma função permitindo que o usuário determine as linhas e colunas da matriz?

Afonso Rogatti de Melo disse...

Eu criei uma estrturada onde vc define a qde de linhas e colunas

#include

int main(){
int DIM;
printf("Digite o tamanho da matriz que deseja criar: "); scanf("%d",&DIM);
int matriz[DIM][DIM];
int linha, coluna;
for(linha = 0 ; linha < DIM ; linha++)
for(coluna = 0 ; coluna < DIM ; coluna++)
{
printf("Elemento [%d][%d]: ", linha+1, coluna+1);
scanf("%d", &matriz[linha][coluna]);
}
for(linha = 0 ; linha < DIM ; linha++)
{
for(coluna = 0 ; coluna < DIM ; coluna++)
printf("%4d", matriz[linha][coluna]);

printf("\n");
}
system("pause");
return 0;
}

Thiago Piermatei thiaguinhopier@yahoo.com.br disse...

Bom dia C progressivo.
Minha dúvida é o seguinte: é regra ter que por colchetes vazio [] para linha e por um tamanho para a coluna?
Porque caso eu tenha que fazer um algoritmo que o usuário determine a dimensão da matriz, logo, a dimensão que essa matriz recebeu é local (não sei nem se estou me expressando corretamente.), no seu caso, você criou uma constante, caso eu não venha criar uma constante, comoi eu posso resolver esse problema? Att.

Anônimo disse...

como eu faço para retornar um vetor de uma função para a função main

orcrux disse...

Cara, se vc tiver passado o vetor por ponteiro e tiver usando sua funçao no vetor, so usar ele normalmente, pq vc so passo o endereço da memoria nao os valores do vetor, ent e so usar normal na linha de baixo.

orcrux disse...

thiaguinhopier@yahoo.com.br , o que vc procura ira encontrar em alocaçao dinamica, ja dependendo do seu problema e do dizer pra funçao vai usar uma matriz muito grande e usar so parte dele ;D


#so nao deixando o povo na vacuo. ashushu

Gostou desse tutorial de C?
Sabia que o acervo do portal C Progressivo é o mesmo, ou maior que, de um livro ou curso presencial?
E o melhor: totalmente gratuito.

Mas para nosso projeto se manter é preciso divulgação.
Para isso, basta curtir nossa página no Facebook e/ou clicar no botão +1 do Google.
Contamos e precisamos de seu apoio.