Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Estruturada II Aula 4 – Passagem de parâmetros por valor e por referência. Prof: Efrem Lousada efrem.lousada@anhanguera.com plainit.co/u/efrem Sumário Prof: Efrem Lousada 2 1. Passagem de Parâmetros 2. Passagem por Valor 3. Passagem por Referência 4. Exercícios Passagem de Parâmetros Prof: Efrem Lousada 3 O mecanismo de informar os valores a serem processados pela função chama-se passagem de parâmetros. A Linguagem C define duas categorias de passagem de parâmetros: - Passagem por valor - Passagem por referência Passagem por valor Prof: Efrem Lousada 4 #include <stdio.h> void troca (int a, int b); main () { int num1, num2; printf ("Entre com o numero 1: "); scanf ("%d",&num1); printf (“\n\n Entre com o numero 2: "); scanf ("%d",&num2); troca(num1, num2); printf ("\n\n O numero 1 agora vale: %d",num1); printf ("\n\n O numero 2 agora vale: %d",num2); // Não funcionou... :( } void troca (int a, int b) { int temp; temp = a; a = b; b = temp; } Passagem por referência Prof: Efrem Lousada 5 Conceitos Mas, e se quisermos que a função realmente troque os valores das variáveis num1 e num 2 passadas a ela como parâmetros? Neste caso, em vez de passar para a função os valores destas variáveis, é preciso passar os seus endereços. Como assim? Passagem por referência Prof: Efrem Lousada 6 O operador ‘&’ O operador ‘&’ (‘operador de endereço’) retorna o endereço de memória da variável à qual é aplicado. Um dos usos do operador ‘&’ é na passagem de parâmetros para funções que esperam um endereço de memória como parâmetro, ou parâmetros passados por referência’ na terminologia de C. A função scanf() é uma função na qual os parâmetros são passados por referência. Passagem por referência Prof: Efrem Lousada 7 #include <stdio.h> void troca (int *a, int *b); main () { int num1, num2; printf ("Entre com o numero 1: "); scanf ("%d",&num1); printf (“\n\n Entre com o numero 2: "); scanf ("%d",&num2); troca(&num1, &num2); printf ("\n\n O numero 1 agora vale: %d",num1); printf ("\n\n O numero 2 agora vale: %d",num2); // Funcionou !!!! } void troca (int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } Exercícios Entrega dia 01/04 Prof: Efrem Lousada 8 1) O que é impresso na tela pelo seguinte programa? #include <stdio.h> int w=1,x=2,y=3,z=4; void foo(int y) { int z=6; int w; printf(“%d %d %d %d ”, w,x,y,z); } main() { int x=7; foo(5); foo(x); printf(“%d %d %d %d.”, w,x,y,z); } Exercícios Prof: Efrem Lousada 9 2) Faça uma função que incremente o valor de um número passado por parâmetro em 100. Utilize a passagem de parâmetro por referência para fazer o incremento. 3) Utilizando passagem por referência, fazer um programa que leia o preço de uma mercadoria e o percentual de reajuste e chame função que receba estes valores como parâmetro e retorne o novo preço da mercadoria com reajuste. Na função main( ) deve ser mostrado o preço da mercadoria depois do aumento, bem como o percentual aplicado. Exercícios Prof: Efrem Lousada 10 4) Escreva um programa que receba um número inteiro representando a quantidade total de segundos e, usando passagem de parâmetros por referência, converta a quantidade informada de segundos em Horas, Minutos e Segundos. Imprima o resultado da conversão no formato HH:MM:SS. Utilize a seguinte função protótipo: void converteHora (int total_segundos, int *hora, int *min, int *seg); Fim, Obrigado! Prof: Efrem Lousada 11
Compartilhar