Passagem de parmetros e Ponteiros Leandro Almeida lma
- Slides: 33
Passagem de parâmetros e Ponteiros Leandro Almeida lma 3@cin. ufpe. br
Parâmetros são utilizados em computação para possibilitar a construção de subprogramas genéricos.
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.
Parâmetros Exemplo: Parâmetros Formais Parâmetros Reais
Passagem de parâmetro por valor
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.
Passagem de parâmetro por valor Exemplo:
Introdução a Ponteiro
Memória Organizacao da memória (variável inteira) int x; (0 x. FF 02)x 0000000
Memória Organizacao da memória (variável inteira) int x; x = 5; (0 x. FF 02)x 5
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; x 0 x 3287 AB Exemplo: Abstração: 0 x 3287 AB x 4
Ponteiros (apontadores) Sintaxe: ◦ Variáveis que são ponteiros são representadas da seguinte forma: tipo *nome_variavel; ◦ Exemplo: int *x; x NULL
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 (0 x. AD 036)y NULL 5
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 (0 x. AD 036)y 0 x. AD 036 5
Trabalhando com ponteiros Toda declaração de ponteiros, inicia o ponteiro com o valor default NULL; int *x; (0 x 3847 CD)x NULL É sempre bom testar se o ponteiro não é NULL antes de acessá-lo; if (x != NULL) {. . . } x – representa o endereço armazenado no ponteiro; int *x; printf(“Endereco da variavel x: %d”, &x); printf(“Endereco guardado em x: %d”, x);
Trabalhando com ponteiros Atribuição de ponteiros. ◦ Só podemos jogar dentro do ponteiro um endereço; int *x; int y = 35; x = &y; (0 x 3847 CD)x (0 x 32496)y 0 x 32496 35 *x – representa o conteúdo final do ponteiro; int *x; printf(“Conteudo final de x: %d”, *x); *x = 28; printf(“Conteudo final de x: %d”, *x);
Trabalhando com ponteiros O que acontece no seguinte programa? #include <stdio. h> #include <conio. h> main() { int y = 5; int *x; x = &y; printf("Valor armazenado na variavel y: %dn", y); printf("Endereco de y: %dn", &y); printf("Valor do conteudo do ponteiro x: %dn", *x); printf("Valor do endereco armazenado no ponteiro x: %dn", x); printf("Valor do endereco de x: %dn", &x); printf("nn. Alterando o valor armazenado na variavel xn"); *x = *x + 1; printf("n. Novo valor do conteudo do ponteiro x: %dn", *x); printf("Valor do endereco armazenado no ponteiro x: %dn", x); printf("Valor via y: %dn", y); getche(); }
Passagem de parâmetro por referência
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.
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:
Passagem de parâmetro por referência
Passagem de parâmetro por referência
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.
#include <stdio. h> #include <conio. h> typedef struct { char modelo[30]; float potencia. Motor; int ano. Fabricacao, num. Portas; }CARRO; void Exibe(CARRO car) { printf("nt. Exibindo carron"); printf("Modelo: %sn", car. modelo); printf("Motor: %. 1 fn", car. potencia. Motor); printf("Ano: %dn", car. ano. Fabricacao); printf("%d portasn", car. num. Portas); } void Preenche(CARRO *car) { printf("Modelo do carro: "); gets( car->modelo ); printf("Motor: "); scanf("%f", &car->potencia. Motor); printf("Ano: "); scanf("%d", &car->ano. Fabricacao); } printf("Numero de portas: "); scanf("%d", &car->num. Portas); main(void) { CARRO fusca; Preenche(&fusca); Exibe(fusca); } getche();
Exercício da aula anterior
#include <stdio. h> #include <stdlib. h> #include <conio. h> typedef struct { char Rua[100], Bairro [20], Cidade [20]; int num, cep; } tipo_endereco; typedef struct { int mat, serie, irmao; char nome[20]; float mens; tipo_endereco ender; } tipo_aluno;
int preencher(tipo_aluno A[20]) { int qa, i, resp; qa =0; 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: "); do{ printf("Colegio Legaln"); printf("nn. Cadastro de Alunosnn"); printf("n. Matricula. : "); scanf("%d", &A[qa]. mat); printf("n. Nome. . . : "); fflush(stdin); gets(A[qa]. nome); printf("n. Serie(1 -4): "); scanf("%d", &A[qa]. serie); printf("n. Irmao na escola(1 -sim/0 -nao): "); scanf("%d", &A[qa]. irmao); switch(A[qa]. serie){ scanf("%d", &A[qa]. ender. cep); case 1: A[qa]. mens = 110; break; qa++; case 2: A[qa]. mens = 130; break; printf("nn. Deseja cadastrar outro aluno(1 -sim/0 -nao)? "); case 3: A[qa]. mens = 160; break; scanf("%d", &resp); case 4: A[qa]. mens = 170; break; } }while ((resp == 1) && (qa <20)); return qa; }
void relatorio_geral(tipo_aluno v_alunos[20], int q ) { int j; printf("Colegio Legaln"); printf("nn. Relatorio Geraln"); printf("n________________"); printf("n. Mat. t. Nomet. Seriet. Irmaot. Mens. t. Ruat. Bairrot. Cidadet. Numerot. Cep"); printf("n________________"); for(j = 0; j < q; j++) { printf("n %5 d %-10 s %5 d %5. 2 f %-10 s %5 d ", 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________________"); } }
main(){ int qa; tipo_alunos[20]; qa=preencher(alunos); relatorio_geral(alunos, qa); printf("n. Tecle enter para sair. . . "); getche(); }
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: void maximo. Minimo(int v[], 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 também o main para usar essas funções.
#include <stdio. h> #include <math. h> void info(int v[], int N, float *media, int *mediana, float *dpadrao) void ordena_crescente (int vet[], int tam) { { int i, soma=0; register int i, j; // indexadores. int aux; float vdev=0; // variavel auxiliar. for(i=0; i<N; i++) for (i = 0; i < (tam - 1); i++) soma+=v[i]; for (j = i + 1; j < tam; j++) if (vet[i] > vet[j]) *media = (float)soma/N; { aux = vet[i]; ordena_crescente(v, N); vet[i] = vet[j]; vet[j] = aux; *mediana = v[N/2]; } } soma=0; void maximo. Minimo(int v[], int N, int *maximo, int *minimo) for(i=0; i<N; i++) { vdev+=(v[i]-(*media))*(v[i]-(*media)); int i; *maximo = v[0]; *dpadrao = sqrt(vdev/N); *minimo = v[0]; for (i=1; i<N; i++) { if(v[i]>*maximo) *maximo = v[i]; if(v[i<*minimo]) *minimo=v[i]; } } }
main() { int vetor[100], vmediana, vmax, vmin, tam, i; float desvio, vmedia; do{ printf("n. Digite o tamanho do vetor: "); scanf("%d", &tam); }while(tam<2 || tam>100); for(i=0; i<tam; i++) { printf("n. Digite o valor da pos. %d: ", i+1); scanf("%d", &vetor[i]); } maximo. Minimo(vetor, tam, &vmax, &vmin); printf("n. O maximo eh: %d n. O valor minimo eh: %d", vmax, vmin); info(vetor, tam, &vmediana, &desvio); printf("n. Media do vetor: %f", vmedia); printf("n. Mediana do vetor: %d", vmediana); printf("n. Desvio padrao do vetor: %f", desvio); }
- Parmetros
- Determine em graus o menor angulo formado pelos ponteiros
- Um relogio feito a 50 anos foi fabricado com ponteiros
- Lma tpwd
- Lma indications semiconscious
- Hava yolu açma aletleri
- Chandys maneuver
- Airway view
- Catequesematerial
- Mutum sabia que hoje é meu aniversário
- O que é uma passagem parentética
- Te de passagem direta
- Anaximandro de mileto
- Passagem oculta mir4
- O que são ritos religiosos
- Estamos aqui de passagem nada trouxemos e nada levaremos
- Quincas borba mal podia encobrir a satisfação do triunfo
- Ritos de iniciação e de passagem
- A passagem do mundo antigo para o mundo medieval 6o ano
- Augusto benvenuto
- Bíblia almeida revista e atualizada ppt
- Thiago almeida barroso
- Faculdade almeida rodrigues
- Bongani angola
- Alicia de almeida
- Jonas almeida
- Rodolfo abrantes tatuagem
- Escola estadual joelina de almeida xavier
- Karoline almeida rangel
- Nossa bandeira guilherme de almeida
- Oscar ribeiro de almeida niemeyer soares filho
- Almeida-pineda algorithm
- Dra denise hematologista
- Pierre d'almeida telles filho