Carregar apresentação
A apresentação está carregando. Por favor, espere
1
FUNDAMENTO DE PROGRAMAÇÃO
LINGUAGEM C – PONTEIROS PARTE 2
2
Ponteiros como Argumento de Funções Ponteiros para Funções Exercícios
SUMÁRIO Ponteiros como Argumento de Funções Ponteiros para Funções Exercícios
3
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
4
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
Em C, uma função A não pode alterar diretamente valores de variáveis da função B que fez a chamada da função A. Em outras palavras, uma função não pode alterar as variáveis de outro escopo local que não seja o seu.
5
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
Por exemplo: Escreva um programa que permute os valores de duas variáveis utilizando apenas atribuições entre elas.
6
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
Solução: 01. int temp,x=10,y=5; 02. temp = x; 03. x = y; 04. y = temp;
7
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
E se o problema fosse: Escreva uma função apta a permutar os valores de duas variáveis da função main utilizando apenas atribuições entre elas.
8
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
Possível Solução (main): int main ( void ){ 01. int a = 5, b = 7; 02. troca(a, b); 03. printf("%i %i \n", a, b); 04. return 0; }
9
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
Possível Solução (função requerida): void troca (int x, int y ){ 01. int temp; 02. temp = x; 03. x = y; 04. y = temp; }
10
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
Possível Solução (função requerida): void troca (int x, int y ){ 01. int temp; 02. temp = x; 03. x = y; 04. y = temp; } Repare que está função não atende ao problema pois os valores de a e b na função main permanecem inalterados.
11
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
A solução para este problema consiste no uso de ponteiros, onde: Passamos para a função troca os endereços de memória onde as variáveis a e b estão armazenadas; E assim a função troca poderá alterar, indiretamente, os conteúdos (valores) das variáveis locais a e b da função main.
12
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
Seguindo este raciocínio, a função troca é reescrita como: void troca (int *px, int *py ){ 01. int temp; 02. temp = *px; 03. *px = *py; 04. *py = temp; }
13
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
void troca (int *px, int *py ){ 01. int temp; //* = “contéudo de” 02.temp = *px; 03.*px = *py; 04.*py = temp; /*Nesta função, os valores serão passados por referência.*/ } Como pode ser visto, agora a função troca receba os endereços das variáveis e, assim, alterar seus valores indiretamente.
14
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
Solução correta: void troca (int *px, int *py ){ int temp; temp = *px; *px = *py; *py = temp; } void main ( void ) { int a = 5, b = 7; troca(&a, &b); /* passamos os endereços das variáveis */ printf("%d %d \n", a, b);
15
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
Pilha de Execução do Programa:
16
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
Pilha de Execução do Programa:
17
PONTEIROS COMO PARÂMETROS DE FUNÇÕES
Pilha de Execução do Programa:
18
PONTEIROS PARA FUNÇÕES
19
PONTEIROS PARA FUNÇÕES
Em C, ponteiros para funções servem, normalmente, para passar uma função como argumento de uma outra função. A forma geral para declarar um ponteiro para uma função é: tipo_retorno (*nome_do_ponteiro) (lista de tipos de parâmetros)
20
PONTEIROS PARA FUNÇÕES
Exemplo: int soma(int a, int b) { return a + b; } int operacao(int x, int y, int (*func)(int,int)) { int g; g = (*func)(x, y); return g;
21
PONTEIROS PARA FUNÇÕES
Exemplo: void main () { int m; m = operacao(7, 5, soma); printf("%i\n", m); }
22
Exercícios
23
PONTEIROS PARA FUNÇÕES
Desenhe a pilha de execução do programa a seguir: void main(){ int x = 10; int *p_x = &x; int **p_p_x = &p_x; printf("%d\n", x); printf("%d\n", *p_x); printf("%d\n", **p_p_x); }
24
PONTEIROS PARA FUNÇÕES
Depure o programa a seguir e desenhe sua pilha de execução: void main(){ int *a, *b, c = 4, d = 2; a = &c; b = &d; *b = 8; *a = *b; *a = 1; b = a; *b = 0; }
25
PONTEIROS PARA FUNÇÕES
Depure o programa a seguir e desenhe sua pilha de execução: void main(){ int *a, *b, c = 8, d = 2; a = &c; b = &d; *a = 5; (*a)+=10; *b = *a; }
26
PONTEIROS PARA FUNÇÕES
Depure o programa a seguir e desenhe sua pilha de execução: void main(){ int *a, *b, *c, d = 12, e = 4, f=0; a = &d; b = &e; c = &f; *a = 5; *c = 1; ++*c; (*a)+=10; *b = *a; c = b; *a = 25; *c = 3; }
27
PONTEIROS PARA FUNÇÕES
Escreva uma função apta a permutar os valores de duas variáveis locais da função main utilizando para isso apenas atribuições entre estas variáveis.
28
PONTEIROS PARA FUNÇÕES
Escreva um programa em C para ler 2 números e ao final, caso o usuário selecione a opção 1, o programa imprimi a tabuada de multiplicação do produto dos dois números, e caso usuário selecione a opção 2, o programa imprimi o maior dos dois e informa se é par,impar,positivo, negativo. Observações: Não deve ser aceito zero para os dois valores informados; O programa deve conter uma função a parte para: tabuada; par/impar;positivo/negativo; Estas funções devem ser ativadas por meio de ponteiros.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.