Unidade D - Funções

Parâmetros e argumentos

Uma função possui o seguinte formato:

tipo_retorno nome_da_funcao ( tipo < parametro1 >, tipo < parametro2 >, . . . , tipo <parametron >)
{
    comandos;
    return( valor de retorno );

}

Temos que:

Declarando uma função

As funções devem ser declaradas fora do programa principal (main()).

Para a sua declaração basta escrever o cabeçalho da função:

tipo_retorno nome_da_funcao ( tipo < parametro1 >, tipo <parametron >)

Chamando uma função

Uma forma clássica de realizarmos a invocação (ou chamada) de uma função é atribuindo o seu valor a uma variável:

variavel = funcao (parametros);

Os parâmetros passados pela função não necessariamente possuem os mesmos nomes que os parâmetros que a função espera.

Esses parâmetros serão mantidos intocados durante a execução da função.

Exemplo:

#include <stdlib.h>
#include <stdio.h>
float quadrado(float w); //declaração da função
int main()
{  float x,y;
       printf("Info nro:");
       scanf("%f",&x);
       y=quadrado(x); //chamando uma função
       printf("%3.2f",y);
       system("PAUSE");
       return 0;
}
float quadrado(float w)/*calcula o quadrado do número passado como parâmetro*/
{   float  z;
     z=w*w;
     return(z);

}

Função sem retorno na Linguagem C

São funções do tipo void. Por exemplo, abaixo temos uma função que imprime o número que for passado para ela como parâmetro.

Exemplo:

#include <stdlib.h>
#include <stdio.h>
void pede_numero();//declaração da função
int main()
{  int x;
        pede_numero(); //chamada da função
       scanf("%d",&x);
       printf("Nro informado:%d",x);
       system("PAUSE");
       return 0;
}
void pede_numero()//criação da função
{    printf("Info nro:");

}

Para chamar esta função , basta chamar seu nome e seu parâmetro(se houver): nome_função (parametros);

Argumentos de função

Há duas formas de passagem de parâmetros em C:

Exemplos:

Passagem por valor

#include <stdio.h>
#include <stdlib.h>
void proc(int y);
void main()
{
   int x;
   x=1;
   printf("Antes x=%d\n",x); //x será 1
   proc(x);
   printf("Depois x=%d\n",x); //x será 1
   system("Pause");
}
void proc(int y)
{
   y=y+1;
   printf("Durante y=%d\n",y); //y será 2

}

O resultado do algoritmo fornece o seguinte resultado:
Antes x= 1
Durante y= 2
Depois x= 1

Passagem por referência

#include <stdio.h>
#include <stdlib.h>
void proc(int *y);
void main()
{
int x;
x=1;
printf("Antes x=%d\n",x); //x será 1
proc(&x); //com o & passamos o endereço da variável
printf("Depois x=%d\n",x); // x será 2
system("Pause");
}
void proc(int *y) /*o y recebe o endereço, assim se modificarmos y modificaremos a variável para a qual y está apontando, no caso x.*/
{
*y=*y+1;
printf("Durante y=%d\n",*y); // y será 2

}

O resultado do algoritmo fornece o seguinte resultado:
Antes x= 1
Durante y= 2
Depois x= 2

Chamando funções com vetores

Quando passamos vetores como argumentos de uma função, apenas o endereço deste vetor será passado para a função. Assim a função receberá um ponteiro para o primeiro elemento no vetor.

Exemplo:
#include <stdio.h>
#include <stdlib.h>
void mostra (int num[10]);
int main(int argc, char *argv[])
{
   int v[10],i;
   for(i=0;i<10;i++){
     v[i]=i;
   }
   mostra(v);
   system("Pause");
}
void mostra(int num[10])//imprime os números de 0 a 9.
{
   int i;
   for(i=0;i<10;i++)
     printf("%d \n",num[i]);   

}

Outra forma de declarar um parâmetro do tipo vetor é como um ponteiro, assim substituímos o int num[10] por int *num:

void mostra(int *num)
{
   int i;
   for(i=0;i<10;i++)
     printf("%d \n",num[i]);   

}

 

Em C, um nome de vetor sem qualquer índice é um ponteiro para o primeiro elemento no vetor.

 

Chamando funções com strings

Quando passamos strings como argumentos de uma função, apenas o endereço desta string será passado para a função. Assim a função receberá um ponteiro para o primeiro elemento na string.

Exemplo:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void mostra (char *string);
int main(int argc, char *argv[])
{
   char s[40];
   gets(s);//devemos digitar uma string
   mostra(s);
   system("Pause");
}
void mostra(char *string)//imprime a string em maiúscula.
{
   int i;
   for(i=0;string[i]!='\0';i++)
   {
     //transforma cada caracter da string em maiúscula.
     string[i]=toupper(string[i]);

     //imprime caracter por caracter da string  
     printf("%c",string[i]);  
   }

}