A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

FUNDAMENTO DE PROGRAMAÇÃO

Apresentações semelhantes


Apresentação em tema: "FUNDAMENTO DE PROGRAMAÇÃO"— Transcrição da apresentação:

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.


Carregar ppt "FUNDAMENTO DE PROGRAMAÇÃO"

Apresentações semelhantes


Anúncios Google