Você está na página 1de 11

TCNICAS DE PROGRAMAO I

Professor: Patric Janner Marques


Aula: Funo com passagem por referncia e
estruturas de dados.

Funes com passagem por referncia


Na passagem de parmetros por valor, as funes no podem
modificar o valor original de uma varivel passada para a
funo. Mas existem casos em que necessrio que toda
modificao feita nos valores dos parmetros dentro da funo
seja repassada para quem a chamou (sem usar variveis
globais).
Logo, quando se deseja que o valor da varivel mude dentro da
funo e essa mudana se reflita fora da funo, usam-se
passagens de parmetros por referncia.

Tcnicas de Programao I

Funes com passagem por referncia


Na passagem de parmetros por referncia no se passam para a
funo os valores das variveis, mas sim os endereos das variveis
na memria.
Sendo assim, para passar para a funo um parmetro por referncia,
a funo precisa usar ponteiros:
void soma _ mais _ um (int *n){
*n = *n + 1;
}
E na chamada da funo, necessrio utilizar o operador & na
frente do nome da varivel que ser passada por referncia para a
funo.
int x = 5;
soma _ mais _ um(&x);
Tcnicas de Programao I

Observando as diferenas por valor


#include <stdio.h>
#include <stdlib.h>
void Troca(int a,int b)
{
int temp;
temp = a;
a = b;
b = temp;
printf("Dentro: %d e %d\n",a,b);
}
int main()
{
int x = 2;
int y = 3;
printf("Antes: %d e %d\n",x,y);
Troca(x,y);
printf("Depois: %d e %d\n",x,y);
return 0;
}
Tcnicas de Programao I

Observando as diferenas por referncia


#include <stdio.h>
#include <stdlib.h>
void Troca(int *a,int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
printf("Dentro: %d e %d\n",*a,*b);
}
int main()
{
int x = 2;
int y = 3;
printf("Antes: %d e %d\n",x,y);
Troca(&x,&y);
printf("Depois: %d e %d\n",x,y);
return 0;
}
Tcnicas de Programao I

Estrutura de dados
Em C, uma estrutura uma coleo de variveis, que podem
ter tipos diferentes e que so referenciadas por um nome
comum, fornecendo uma maneira conveniente de se ter
informaes relacionadas agrupadas.
As variveis que formam a estrutura so chamadas de
elementos da estrutura.

Tcnicas de Programao I

Estrutura de dados
Uma estrutura para manter as informaes de um padro de
questes de uma prova, onde considera-se o nmero da
questo na prova, o grau de dificuldade da questo e a
alternativa correta, por exemplo, poderia ter o seguinte formato:
struct formatoQuestao {
int numeroQuestao;
int grauDificuldade; // de 0 (muito facil) a 5(muito difcil)
char letraCorreta;
};

Tcnicas de Programao I

Estrutura de dados
A declarao da estrutura no cdigo:
struct formatoQuestao questao1;

O acesso aos elementos ocorre da seguinte forma:


questao1.numeroQuestao = 22;

Tcnicas de Programao I

Estrutura de dados
possvel declarar vrias estruturas:
struct formatoQuestao matematica, geografia, fisica;

Inclusive declarar um vetor dessa estrutura:


struct formatoQuestao questoes[20];
E acesso assim:
questoes[0].numeroQuestao;

Tcnicas de Programao I

Estrutura de dados
Assim como os outros tipos de variveis, possvel atribuir uma
estrutura para outra, desde que elas sejam do mesmo tipo:
struct formatoQuestao matematica[10], geografia, fisica;
geografia=fisica;

Tcnicas de Programao I

10

Estrutura de dados
Exerccio:

Escrever um programa que entrevista 10 pessoas,


solicitando o sexo e a idade de cada uma. No final, deve
escrever o nmero de pessoas do sexo masculino com
idade entre 18 e 30 anos, e o percentual deste conjunto em
relao ao total (usar um vetor de estruturas).
Na entrada do sexo verifique que seja M, m, F ou f. Caso
contrrio, encerre a pesquisa.

Tcnicas de Programao I

11

Você também pode gostar