Passando um vetor para função em C

 

Por: Eduardo Casavella

Para passar um vetor para uma função usando linguagem C utiliza-se um ponteiro como parâmetro da função. Ao usarmos o ponteiro como parâmetro, na realidade estamos passando o endereço inicial do vetor e não os seus elementos.

Vamos exemplificar uma passagem de vetor em uma função através de um exemplo prático.

O programa a seguir recebe 10 notas e armazena-as em um vetor.

Para efetuar o cálculo da média foi implementada uma função que recebe a quantidade de elementos do vetor e o seu endereço inicial, cujo protótipo é:

float media (int n, float *vnotas);

Posteriormente, no corpo da função efetuamos o processamento que manipula os dados do vetor de modo a calcular a média.
 

Veja o código da função comentada abaixo:

float media (int n, float *vnotas)
{
  int i;
  float m = 0, soma = 0;
  
  //fazendo a somatória das notas
  for (i = 0; i < n; i++)
    soma = soma + vnotas[i];    
  
  //dividindo pela quantidade de elementos n
  m = soma / n;
  
  //retornando a média
  return m;
}

 

A seguir o código fonte completo do exemplo:

 
#include <stdio.h>
#include <stdlib.h>

//protótipo da função media
float media (int n, float *vnotas);

int main (void)
{
  float vnotas[10];
  float media_notas;
  int i;

  /* leitura das notas */
  for (i = 0; i < 10; i++)
  {
    printf("Digite os valores das notas: ");
    scanf("%f", &vnotas[i]);
  }
  
  //chamada da função
  media_notas = media(10,vnotas);  
  
  printf ( "\nMedia = %.1f \n", media_notas );
  
  system("pause");
  return 0;
}

/* Função para cálculo da média 
   Parâmetros: 
      Recebe a quantidade de elementos n
      Recebe o endereço inicial do vetor notas em *vnotas
   Retorno: 
     Retorna a media na variavel m
*/
float media (int n, float *vnotas)
{
  int i;
  float m = 0, soma = 0;
  
  //fazendo a somatória das notas
  for (i = 0; i < n; i++)
    soma = soma + vnotas[i];    
  
  //dividindo pela quantidade de elementos n
  m = soma / n;
  
  //retornando a média
  return m;
}

 

Tela de execução

exemplo passando um vetor para função c

Tela de execução do exemplo passando um vetor para função C


 
Até a próxima!

6 respostas a Passando um vetor para função em C

  • Marcos Pereira da Silva disse:

    Ótimo. Ganhei mais conhecimentos. Muito legal.

  • Cintia Sousa disse:

    Muito obrigada pelo conhecimento transmitido.

  • Yandi Jorge Silvestre disse:

    Muito bom aprendi muito contigo.

  • husadjhsff disse:

    muito bom, resolveu meu problema, obrigado

  • Douglas Zölfeld Sucha disse:

    Muito bom! Seu tutorial está bem explicado, e os exemplos bem fácil de entender. Me ajudou pra caramba.

  • Wagner Cardoso disse:

    porque que quando passo de de 6 na quantidade de notas o programa dá pau, ou sai um resultado inesperado, veja o meu código…

    #include
    #include
    #include

    float media(int n, float *vnotas);
    void ordena (int n, float *vnotas);

    int main(){

    int i, qtdeNotas;
    float nota[qtdeNotas];//Vetor nota terá a dimensão da quantidade de notas

    printf(“\nEntre com a quantidade de notas: “); scanf(“%d”, &qtdeNotas);

    for(i=0; i<qtdeNotas; i++){//i começa em zero e o laço se repete até que i seja < que a quantiodade de notas
    printf("Digite a nota %d: ", i+1);
    scanf("%f", &nota[i]); //enquantoo laço for percorrido a nota informada será lida

    }

    printf("\nMedia = %.2f", media(qtdeNotas, nota)); /*Dentro da função printf é chamada a função media
    passando os paramnetros qtdeNotas e nota, ambos os dados foram digitados pelo usuário e processados na
    função media a qual retornará a média das notas digitadas*/

    printf("\n\nNotas ordenadas…");
    ordena(qtdeNotas, nota);

    getch();
    return 0;
    }

    float media(int n, float *vnotas){/*Função com dois parametros, o segundo é um
    ponteiro que indica o inicio de um vetor*/

    float soma=0, m=0;
    int i;
    for(i=0; i<n; i++){

    soma = soma + vnotas[i];
    }
    m=soma/n;
    return m;

    }

    void ordena (int n, float *vnotas){
    int i, j, aux;

    for(i=0; i<n; i++){

    for(j=i+1; j<n; j++){

    if(vnotas[i] < vnotas[j]){
    aux = vnotas[j];
    vnotas[j] = vnotas[i];
    vnotas[i] = aux;
    }
    }
    }

    for(i=0; i<n; i++)
    printf("\n%.2f", vnotas[i]);
    }