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]);
}
| ||||
| ||||
|
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]);
}