1 / 31

Passagem de parâmetros e Ponteiros

Passagem de parâmetros e Ponteiros. Leandro Almeida lma3@cin.ufpe.br. Parâmetros. Parâmetros são utilizados em computação para possibilitar a construção de subprogramas genéricos. Parâmetros. Parâmetros Formais Parâmetros formais são as variáveis declaradas no cabeçalho do subprograma.

elu
Download Presentation

Passagem de parâmetros e Ponteiros

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Passagem de parâmetros e Ponteiros Leandro Almeida lma3@cin.ufpe.br

  2. Parâmetros • Parâmetros são utilizados em computação para possibilitar a construção de subprogramas genéricos.

  3. Parâmetros • Parâmetros Formais • Parâmetros formais são as variáveis declaradas no cabeçalho do subprograma. • Parâmetros Reais • Parâmetros reais são as variáveis passadas no instante da chamada do subprograma.

  4. Parâmetros • Exemplo: Parâmetros Formais Parâmetros Reais

  5. Passagem de parâmetro por valor

  6. Passagem de parâmetro por valor • No instante da chamada do subprograma, o parâmetro formal recebe uma cópia do valor do parâmetro real correspondente. • Alterações feitas nos parâmetros formais não refletem nos parâmetros reais correspondentes. • Caracteriza-se por ser um mecanismo de entrada de dados para o subprograma.

  7. Passagem de parâmetro por valor • Exemplo:

  8. Introdução a Ponteiro

  9. Memória • Organizacao da memória (variável inteira) (0xFF02)x 0000000 int x;

  10. Memória • Organizacao da memória (variável inteira) (0xFF02)x 5 int x; x = 5;

  11. Ponteiros (apontadores) • Ponteiros (ou apontadores) são variáveis que, ao invés de guardar um dado (valor), guardam um endereço de memória, associada a outra variável; • Dessa forma, ponteiros fazem referência a outra variável; • Exemplo: • Abstração: x 0x3287AB 0x3287AB 4 x

  12. Ponteiros (apontadores) • Sintaxe: • Variáveis que são ponteiros são representadas da seguinte forma: tipo *nome_variavel; • Exemplo: x int *x; NULL

  13. Ponteiros (apontadores) • Sintaxe: • Variáveis que são ponteiros são representadas da seguinte forma: tipo *nome_variavel; • Exemplo: int *x; int y = 5; x NULL (0xAD036)y 5

  14. Ponteiros (apontadores) • Sintaxe: • Variáveis que são ponteiros são representadas da seguinte forma: tipo *nome_variavel; • Exemplo: int *x; int y = 5; x = &y; x 0xAD036 (0xAD036)y 5

  15. Trabalhando com ponteiros • Toda declaração de ponteiros, inicia o ponteiro com o valor default NULL; • É sempre bom testar se o ponteiro não é NULL antes de acessá-lo; • x – representa o endereço armazenado no ponteiro; (0x3847CD)x int *x; NULL if (x != NULL) { ... } int *x; printf(“Endereco da variavel x: %d”,&x); printf(“Endereco guardado em x: %d”,x);

  16. Trabalhando com ponteiros • Atribuição de ponteiros. • Só podemos jogar dentro do ponteiro um endereço; • *x – representa o conteúdo final do ponteiro; (0x3847CD)x int *x; int y = 35; x = &y; 0x32496 (0x32496)y 35 int *x; printf(“Conteudo final de x: %d”,*x); *x = 28; printf(“Conteudo final de x: %d”,*x);

  17. Trabalhando com ponteiros • O que acontece no seguinte programa? int y = 5; int *x; x = &y; printf("Valor armazenado na variavel y: %d\n", y); printf("Endereco de y: %d\n",&y); printf("Valor do conteudo do ponteiro x: %d\n",*x); printf("Valor do endereco armazenado no ponteiro x: %d\n", x); printf("Valor do endereco de x: %d\n",&x); printf("Alterando o valor armazenado na variavel x\n"); *x = *x + 1; printf("Novo valor do conteudo do ponteiro x: %d\n",*x); printf("Valor do endereco armazenado no ponteiro x: %d\n", x); printf("Valor via y: %d\n",y);

  18. Passagem de parâmetro por referência

  19. Passagem de parâmetro por referência • Caracteriza-se por ser um mecanismo de comunicação bidirecional com o subprograma, ou seja, é um mecanismo de entrada e saída de dados. • Qualquer modificação feita em um parâmetro formal implica em alteração no parâmetro real correspondente.

  20. Passagem de parâmetro por referência • Na passagem por referência utiliza-se um tipo de dados especial chamado ponteiro, que representa o endereço da variável passada por parâmetro. Representado pelo * após o tipo da variável e antes do seu nome. • Exemplo:

  21. Passagem de parâmetro por referência

  22. Passagem de parâmetro por referência

  23. Ponteiros com registros • Crie um programa na linguagem C que define a estrutura de um carro, altere seus dados através de uma função (use passagem por referência e o operador ->) bem como use outra função para exibir os membros da struct.

  24. void Preenche(CARRO *car) { printf("Modelo do carro: "); gets( car->modelo ); printf("Motor: "); scanf("%f", &car->potenciaMotor); printf("Ano: "); scanf("%d", &car->anoFabricacao); printf("Numero de portas: "); scanf("%d", &car->numPortas); } main(void) { CARRO fusca; Preenche(&fusca); Exibe(fusca); getche(); } #include <stdio.h> #include <conio.h> typedefstruct { char modelo[30]; floatpotenciaMotor; intanoFabricacao, numPortas; }CARRO; void Exibe(CARRO car) { printf("\n\tExibindo carro\n"); printf("Modelo: %s\n", car.modelo); printf("Motor: %.1f\n", car.potenciaMotor); printf("Ano: %dn", car.anoFabricacao); printf("%d portas\n", car.numPortas); }

  25. Exercício da aula anterior

  26. #include <stdio.h> #include <stdlib.h> #include <conio.h> typedefstruct { char Rua[100], Bairro [20], Cidade [20]; int num, cep; } tipo_endereco; typedefstruct { intmat, serie, irmao; char nome[20]; float mens; tipo_enderecoender; } tipo_aluno;

  27. if (A[qa].irmao == 1) A[qa].mens = A[qa].mens*0.8; printf("\n digite o endereco: "); printf("\n Rua : "); fflush(stdin); gets(A[qa].ender.Rua); printf("\n Bairro: "); fflush(stdin); gets(A[qa].ender.Bairro); printf("\n Cidade : "); fflush(stdin); gets(A[qa].ender.Cidade); printf("\n numero: "); ; scanf("%d",&A[qa].ender.num); printf("\n cep: "); scanf("%d",&A[qa].ender.cep); qa++; printf("\n\nDeseja cadastrar outro aluno(1-sim/0-nao)? "); scanf("%d",&resp); }while ((resp == 1) && (qa <20)); returnqa; } int preencher(tipo_aluno A[20]) { intqa, i, resp; qa =0; do{ printf("Colegio Legal\n"); printf("\n\nCadastro de Alunos\n\n"); printf("\nMatricula.: "); scanf("%d",&A[qa].mat); printf("\nNome......: "); fflush(stdin); gets(A[qa].nome); printf("\nSerie(1-4): "); scanf("%d",&A[qa].serie); printf("\nIrmao na escola(1-sim/0-nao):"); scanf("%d",&A[qa].irmao); switch(A[qa].serie){ case 1: A[qa].mens = 110; break; case 2: A[qa].mens = 130; break; case 3: A[qa].mens = 160; break; case 4: A[qa].mens = 170; break; }

  28. voidrelatorio_geral(tipo_alunov_alunos[20],int q ) { int j; printf("Colegio Legal\n"); printf("\n\nRelatorio Geral\n"); printf("\n________________________________"); printf("\nMat.\tNome\tSerie\tIrmao\tMens.\tRua\tBairro\tCidade\tNumero\tCep"); printf("\n________________________________"); for(j = 0; j < q; j++) { printf("\n %5d %-10s %5d %5d %5.2f %-10s %-10s %-10s %5d %5d ", v_alunos[j].mat, v_alunos[j].nome, v_alunos[j].serie, v_alunos[j].irmao, v_alunos[j].mens, v_alunos[j].ender.Rua, v_alunos[j].ender.Bairro, v_alunos[j].ender.Cidade, v_alunos[j].ender.num, v_alunos[j].ender.cep); printf("\n_______________________________"); } }

  29. main(){ intqa; tipo_aluno alunos[20]; qa=preencher(alunos); relatorio_geral(alunos,qa); printf("\nTecleenter para sair..."); getche(); }

  30. Exercício • Escreva um programa que: • Possua uma função que recebe como parâmetros um vetor de inteiros v, o número de elementos dele N e ponteiros para variáveis nas quais devem ser armazenados os valores maximo e minimo do vetor. Sua assinatura deve ser: • voidmaximoMinimo(intv[], int N, int *maximo, int *minimo); • Outra função que retorne via ponteiros a média, mediana e desvio padrão do vetor passado como parâmetro. • Escreva o main para usar essas funções.

More Related