Nesta parte do tutorial vamos ver como utilizar vetores e matrizes, estáticos, como parâmetros/argumento e retorno de funções.

O básico sobre esses tipos de dados já foram visto em Vetor e Matriz sendo a leitura recomendada.

Os assuntos vetor de ponteiros e vetor de ponteiros para função pode ser conferido em c Ponteiros: Matriz/Vetor e c Ponteiros: Vetor de Ponteiro para Função.

Existem outras formas para manipulação de vetore/matrizes com uso de alocação de memória, mas esse assunto será visto em futuras atualizações.

Para utilizarmos vetores e matrizes na linguagem C é bem simples. Basta definirmos o tipo e nome do nome do parâmetro, seguido de [] que indica que queremos trabalhar com um vetor. Além disso, precisamos informar o número de elementos contidos no vetor.

Sintaxe
tipo_retorno nome_funcao(tipo_dado nome_parametro[], int dimensao){
    //corpo
}
nome_funcao( nome_vetor, dimensao); //passagem de argumento
Exemplo 1
#include <stdio.h>

void vetor(int v[], int tamanho);

void main()
{
    int v[5]={1,2,3,4,5};
    vetor(v,5); //passando vetor e seu tamanho
}

void vetor(int v[], int tamanho)
{  
    int i;
    for( i = 0; i < tamanho;i++)
        printf("%d ", v[i]);
}
Saída
1 2 3 4 5

Quando utilizamos um vetor como parâmetro de uma função, esse parâmetro recebe apenas o endereço de memória do primeiro elemento do vetor passado como argumento. Assim, não conseguimos utilizar o operador sizeof para descobrir o número de elementos.

Para utilizarmos e matrizes como parâmetros na linguagem C é bem simples também. Basta definirmos o tipo e nome do nome do parâmetro, seguido de [][] que indica que querem trabalhar com uma matriz. Além disso, precisamos informar o número de linhas e colunas.

Sintaxe
tipo_retorno nome_funcao(int linhas, int colunas, tipo_dado nome_parametro[linhas][colunas]){
    //corpo
}
nome_funcao(linhas, colunas, tipo_dado nome_parametro[linhas][colunas]); //passagem de argumento
Exemplo 4
#include <stdio.h>

void matriz(int linhas, int colunas, int m[linhas][colunas])
{  
    int i,j;
    for( i = 0; i < linhas ;i++)
    {
        for(j = 0 ; j < colunas ; j++)
        {
            printf("%d ", m[i][j]);
        }
        printf("\n");
    }
}

void main()
{
    int m[2][2]={{1,2},{3,4}};
    matriz(2,2,m); //passando vetor e seu tamanho
}}
Saída
1 2
3 4

Quando utilizamos uma matriz como parâmetro de uma função, esse parâmetro recebe apenas o endereço de memória do primeiro elemento da matriz. Assim, não conseguimos utilizar o operador sizeof para descobrir o número de elementos.

O retorno de vetores e matriz em funções é feito utilizando ponteiro que é informado como tipo de retorno da função.

A linguagem C não permite que a referência de uma variável local seja retorna de uma função. Para isso, precisamos declarar a variável local como static.

Sintaxe
tipo_retorno *nome_funcao(parametros); //protótipo
Exemplo 5
#include <stdio.h>

int *vetor(void);

void main()
{
    int *v = vetor();
    int i;
    for(i = 0; i < 3 ; i++)
        printf("%d ", v[i]);
}

int *vetor(void)
{  
    static int v[3] = {1,2,3};
    return v;
}
Saída
1 2 3

Como a linguagem C não armazena informação sobre as dimensões dos vetores e matrizes é necessário ter conhecimento dessas informações para trabalhar com esses tipos de dados.

  1. 11/03/2025 - revisão 4 - Ajustes em intro
  2. 08/10/2024 - revisão 3 - Ajustes pontuais
  3. 30/08/2024 - revisão 2 - Correção em links de objetivos
  4. 28/09/2023 - revisão 1 - Correção em referências, erros gramaticais, sintaxe e exemplos
  5. 19/05/2023 - versão inicial