Última atualização em 27 de julho de 2020

Atuais argumentos #

Argumentos que são mencionados na chamada de função é conhecido como o argumento real. Por exemplo:

func1(12, 23);

em nenhum lugar 12 e 23 são argumentos reais.

>

Atuais argumentos podem ser constantes, variáveis, expressões etc.

12
func1(a, b); // here actual arguments are variablefunc1(a + b, b + a); // here actual arguments are expression

Discumentos formais #

Argumentos que são mencionados na definição da função são chamados de argumentos formais. Os argumentos formais são muito semelhantes às variáveis locais dentro da função. Assim como as variáveis locais, os argumentos formais são destruídos quando a função termina.

1234
int factorial(int n){ // write logic here}

Aqui n é o argumento formal. Coisas a lembrar sobre argumentos reais e formais.

  1. Ordem, número, e tipo dos argumentos reais na chamada de função devem combinar com os argumentos formais da função.
  2. Se houver um descasamento de tipo entre argumentos reais e formais então o compilador tentará converter o tipo de argumentos reais em argumentos formais se for legal, caso contrário, um valor de lixo será passado para o argumento formal.
  3. Alterações feitas no argumento formal não afetam os argumentos reais.

O programa a seguir demonstra este comportamento.

 1 2 3 4 5 6 7 8 910111213141516171819202122232425
#include<stdio.h>void func_1(int);int main(){ int x = 10; printf("Before function call\n"); printf("x = %d\n", x); func_1(x); printf("After function call\n"); printf("x = %d\n", x); // signal to operating system program ran fine return 0;}void func_1(int a){ a += 1; a++; printf("\na = %d\n\n", a);}

Aqui o valor da variável x é 10 antes da função func_1() ser chamada, depois de func_1() ser chamada, o valor de x dentro de main() é ainda 10. As alterações feitas dentro da função func_1() não afetam o valor de x. Isto acontece porque quando passamos valores para as funções, uma cópia do valor é feita e essa cópia é passada para os argumentos formais. Assim os argumentos formais trabalham em uma cópia do valor original, não o valor original em si, por isso as alterações feitas dentro de func_1() não são refletidas dentro de main(). Este processo é conhecido como passar argumentos usando Call by Value, vamos discutir este conceito com mais detalhes nos próximos capítulos.

Deixe uma resposta

O seu endereço de email não será publicado.